31.3. 問い合わせの発行と結果の処理

SQL 文をデータベースに発行する時には必ず、Statement、または、PreparedStatement のインスタンスが必要です。 Statement または PreparedStatement のインスタンスがあれば、問い合わせを発行できます。 これは、結果全体を保持する ResultSet のインスタンスを返します。 (この動作の変更方法については項31.3.1を参照してください。) 次に示す 例31-1 は、この処理を示します。

例 31-1. JDCB で簡単な問い合わせを処理

この例は、Statement を使用して、簡単な問い合わせを発行し、各行の最初の列を表示します。

Statement st = db.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM mytable WHERE columnfoo = 500");
while (rs.next()) {
    System.out.print("Column 1 returned ");
    System.out.println(rs.getString(1));
}
rs.close();
st.close();

この例は、PreparedStatement と問い合わせにバインドする値を使用して、同一の問い合わせを発行します。

int foovalue = 500;
PreparedStatement st = db.prepareStatement("SELECT * FROM mytable WHERE columnfoo = ?");
st.setInt(1, foovalue);
ResultSet rs = st.executeQuery();
while (rs.next()) {
    System.out.print("Column 1 returned ");
    System.out.println(rs.getString(1));
}
rs.close();
st.close();

31.3.1. カーソルに基づいて結果を取り出す

デフォルトでは、ドライバは問い合わせの結果を一度にすべて収集します。 これは巨大なデータセットには不向きですので、JDBCドライバは、データベースカーソル上にResultSetを置き、少量の行だけを取り出す手段を提供しています。

行のごく一部は接続のクライアント側に一時保存され、カーソルの移動によって次の行ブロックが取り出された時に破棄されます。

例 31-2. カーソルの有効、無効を変更するための抽出サイズの設定

コードをカーソルモードに変更することは簡単で、Statementの抽出サイズを適当なサイズに設定するだけです。 抽出サイズを0に戻せば、(デフォルトの動作である)すべての行が取り出されるようになります。

Statement st = db.createStatement();
// カーソルの使用を有効にする。
st.setFetchSize(50);
ResultSet rs = st.executeQuery("SELECT * FROM mytable");
while (rs.next()) {
   System.out.print("a row was returned.");
}
rs.close();
// カーソルを無効にする。
st.setFetchSize(0);
ResultSet rs = st.executeQuery("SELECT * FROM mytable");
while (rs.next()) {
   System.out.print("many rows were returned.");
}
rs.close();
// 文を閉じる。
st.close();

31.3.2. Statement または PreparedStatement インタフェースの使用

Statement、または PreparedStatement インタフェースを使用する際は、以下のことを考慮しなければいけません。

31.3.3. ResultSet インタフェースの使用

ResultSetインタフェースを使用する際、以下のことを考慮しなければいけません。