PreparedStatement.executeQuery メソッドを使用した表からのデータの取得

パラメーター・マーカーを指定した SELECT ステートメントを使用して表からデータを取得するには、PreparedStatement.executeQuery メソッドを使用します。

このタスクについて

このメソッドは、結果表を ResultSet オブジェクトとして返します。 結果表を取得したら、ResultSet メソッドを使用して結果表の中を移動し、各行の個々の列値を取得する必要があります。

また、 IBM® Data Server Driver for JDBC and SQLJPreparedStatement.executeQuery メソッドを使用して、ストアドプロシージャ呼び出しから結果セットを取得することもできます。ただし、そのストアドプロシージャが1つの結果セットのみを返す場合で、入力パラメータのみを持つ場合に限ります。 ストアード・プロシージャーが複数の結果セットを返す場合は、PreparedStatement.execute メソッドを使用する必要があります。

パラメーター・マーカーのないステートメントの場合も、PreparedStatement.executeQuery メソッドを使用できます。 1 つの照会を何度も実行する場合は、SQL ステートメントを PreparedStatement として作成する方がパフォーマンスが良くなります。

プロシージャー

パラメーター・マーカーを指定した SELECT ステートメントを使用して表から行を取得するには、以下の手順を実行する必要があります。

  1. Connection.prepareStatement メソッドを呼び出して、 PreparedStatement オブジェクトを作成します。
  2. PreparedStatement.setXXX のメソッドを呼び出して、入力パラメータに値を渡します。
  3. PreparedStatement.executeQuery メソッドを呼び出して、 ResultSet オブジェクト内の SELECT 文から結果テーブルを取得します。
    制限事項: IN 述語を含む PreparedStatement について、IN 述語の引数となる式には、ターゲットデータサーバーが Db2 の Linux®、UNIX、および Windows システムの場合、32767 以上のパラメータを含めることはできません。 そうでない場合、 IBM Data Server Driver for JDBC and SQLJ エラーコード-4499とともに SQLException を返します。
  4. ループ内で、 ResultSet.next メソッドを使用してカーソルを配置し、 ResultSet オブジェクトの現在の行の各列から、 getXXX メソッドを使用してデータを取得します。
  5. ResultSet.close メソッドを呼び出して、 ResultSet オブジェクトを閉じます。
  6. PreparedStatement オブジェクトの使用を終えたら、 PreparedStatement.close メソッドを呼び出してオブジェクトを閉じます。

従業員表から特定の従業員の行を取得するコードを以下に示します。 選択されたステートメントの右にある番号は、前述のステップに対応しています。
図1: PreparedStatement.executeQuery の使用例
String empnum, phonenum;
Connection con;
PreparedStatement pstmt;
ResultSet rs;
…
pstmt = con.prepareStatement(
  "SELECT EMPNO, PHONENO FROM EMPLOYEE WHERE EMPNO=?"); 
                                  // Create a PreparedStatement object    1 
pstmt.setString(1,"000010");      // Assign value to input parameter      2 

rs = pstmt.executeQuery();        // Get the result table from the query  3 
while (rs.next()) {               // Position the cursor                  4 
 empnum = rs.getString(1);        // Retrieve the first column value
 phonenum = rs.getString(2);      // Retrieve the first column value
 System.out.println("Employee number = " + empnum +
   "Phone number = " + phonenum);
                                  // Print the column values
}
rs.close();                       // Close the ResultSet                  5 
pstmt.close();                    // Close the PreparedStatement          6