パラメータがある SQL ステートメントの使用
IN パラメータを含む SQL ステートメントを使用して SQL Server データベースのデータを処理する場合は、SQLServerPreparedStatement クラスの executeQuery メソッドを使用して、要求されたデータを含む SQLServerResultSet を取得することができます。 この場合、最初に SQLServerConnection クラスの prepareStatement メソッドを使用して、SQLServerPreparedStatement オブジェクトを作成する必要があります。
SQL ステートメントを作成する場合、IN パラメータは ? (疑問符) 文字で指定します。これはパラメータ値のプレースホルダになり、後で SQL ステートメントに渡されます。 パラメータの値を指定するには、SQLServerPreparedStatement クラスの setter メソッドの 1 つを使用できます。 使用する setter メソッドは、SQL ステートメントに渡す値のデータ型によって決定されます。
setter メソッドに値を渡す場合は、SQL ステートメントで使用する実際の値だけでなく、SQL ステートメント内のパラメータの順序も指定する必要があります。 たとえば、SQL ステートメントに 1 つのパラメータがある場合、その序数値は 1 です。ステートメントに 2 つのパラメータがある場合、最初の序数値は 1 で、2 番目の序数値は 2 になります。
次の例は、SQL Server 2005 AdventureWorks サンプル データベースに対して開いている接続を関数に渡し、準備された SQL ステートメントを作成して 1 つの String のパラメータ値で実行し、その結果を結果セットから読み取って出力します。
public static void executeStatement(Connection con) {
try {
String SQL = "SELECT LastName, FirstName FROM Person.Contact WHERE LastName = ?";
PreparedStatement pstmt = con.prepareStatement(SQL);
pstmt.setString(1, "Smith");
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getString("LastName") + ", " + rs.getString("FirstName"));
}
rs.close();
pstmt.close();
}
catch (Exception e) {
e.printStackTrace();
}
}