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

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

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

この例は、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インタフェースを使用する際、以下のことを考慮しなければいけません。

アダルトレンタルサーバー