パラメーターのメタデータの使用
SQLServerPreparedStatement または SQLServerCallableStatement オブジェクトで格納されているパラメーターについてクエリする用途向けに、Microsoft JDBC Driver for SQL Server には、SQLServerParameterMetaData クラスが実装されています。 このクラスには、単一値の形式で情報を返すフィールドおよびメソッドが多数存在します。
SQLServerParameterMetaData オブジェクトを作成するには、SQLServerPreparedStatement クラスと SQLServerCallableStatement クラスの getParameterMetaData メソッドを使用します。
次の例の関数は、AdventureWorks2022 サンプル データベースに対して開かれた接続を渡され、SQLServerCallableStatement クラスの getParameterMetaData メソッドを使って SQLServerParameterMetaData オブジェクトを取得した後、SQLServerParameterMetaData オブジェクトのさまざまなメソッドが使って、HumanResources.uspUpdateEmployeeHireInfo ストアド プロシージャ内に含まれるパラメーターの型とモードに関する情報を表示します。
public static void getParameterMetaData(Connection con) {
try(CallableStatement cstmt = con.prepareCall("{call HumanResources.uspUpdateEmployeeHireInfo(?, ?, ?, ?, ?)}");) {
ParameterMetaData pmd = cstmt.getParameterMetaData();
int count = pmd.getParameterCount();
for (int i = 1; i <= count; i++) {
System.out.println("TYPE: " + pmd.getParameterTypeName(i) + " MODE: " + pmd.getParameterMode(i));
}
}
// Handle any errors that may have occurred.
catch (SQLException e) {
e.printStackTrace();
}
}
Note
準備されたステートメントで SQLServerParameterMetaData クラスを使用する場合は、いくつかの制限があります。
SQL Server 向け Microsoft JDBC Driver 6.0 (以上) を使用する場合: SELECT、DELETE、INSERT、UPDATE にサブクエリや結合が含まれていなければ、SQL Server 2008 または 2008 R2 を使用するとき、JDBC ドライバーはこれらのステートメントをサポートします。
SQL Server 2008 または 2008 R2 を使用するとき、SQLServerParameterMetaData クラスでは、MERGE クエリもサポートされません。 SQL Server 2012 以降のバージョンの場合、複雑なクエリを持つパラメーター メタデータがサポートされます。
暗号化された列に対するパラメーターのメタデータの取得はサポートされていません。 SQL Server 向け Microsoft JDBC Driver 4.1 または 4.2 を使用する場合: SELECT、DELETE、INSERT、UPDATE にサブクエリや結合が含まれていなければ、JDBC ドライバーはこれらのステートメントをサポートします。 SQLServerParameterMetaData クラスでは、MERGE クエリもサポートされません。