モジュール java.sql
パッケージ java.sql

インタフェースResultSet

すべてのスーパー・インタフェース:
AutoCloseable, Wrapper
既知のすべてのサブインタフェース:
CachedRowSet, FilteredRowSet, JdbcRowSet, JoinRowSet, RowSet, SyncResolver, WebRowSet

public interface ResultSet extends Wrapper, AutoCloseable
データベースの結果セットを表すデータの表で、通常、データベースに照会する文を実行することによって生成されます。

ResultSetオブジェクトは、カーソルがデータの現在の行を指し示すよう維持します。 初期状態では、カーソルは最初の行の先頭に配置されます。 nextメソッドにより、カーソルは次の行に移動します。nextは、ResultSetオブジェクトにそれ以上行がない場合にfalseを返すので、whileループに使用して結果セットを反復処理することができます。

デフォルトのResultSetオブジェクトは更新不可で、カーソルは順方向にのみ進みます。 したがってこのオブジェクトは、最初の行から最後の行へ向かって1回だけ実行できます。 スクロールまたは更新、あるいはその両方が可能なResultSetオブジェクトを生成できます。 conが有効なConnectionオブジェクトである次のコード・フラグメントは、スクロール可能でほかで行われた更新を反映しない結果セット、および更新可能な結果セットの作成方法を示しています。 ほかのオプションについては、ResultSetのフィールドを参照してください。


       Statement stmt = con.createStatement(
                                      ResultSet.TYPE_SCROLL_INSENSITIVE,
                                      ResultSet.CONCUR_UPDATABLE);
       ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");
       // rs will be scrollable, will not show changes made by others,
       // and will be updatable

 
ResultSetインタフェースは、現在の行から列値を取得するgetterメソッド(getBooleangetLongなど)を提供します。 値は、列のインデックス番号か列名のどちらかを使って取得できます。 通常は列インデックスを使用する方が効果的です。 列は1から順に番号付けされます。 移植性を最大限に引き出すため、各行内の結果セットの列は左から右の順に読み込まれ、各行は1回だけ読み込まれるようにします。

getterメソッドでは、JDBCドライバが基本的なデータをgetterメソッドで指定されたJava型に変換し、適切なJavaの値を返します。 JDBC仕様には、ResultSet getterメソッドで使用可能なSQL型からJava型へのマッピングを示す表があります。

getterメソッドへの入力として使用される列名では、大文字と小文字は区別されません。 列名でgetterメソッドが呼び出され、複数の列が同じ名前を持つ場合は、最初に一致する列の値が返されます。 列名のオプションは、結果セットで生成されるSQLクエリーで列名が使用される場合に使われるよう設計されています。 クエリーで明示的に命名されない列の場合には、列番号を使用するのがもっともよい方法です。 列名を使用する場合、プログラマは目的の列を一意に指すことを保証するように注意してください。これは、SQL AS節を使用して実現できます。

JDBC 2.0 API (Java 2 SDK, Standard Edition、バージョン1.2)で、このインタフェースにアップデータ・メソッドのセットが追加されました。 getterメソッドのパラメータに関するコメントは、updaterメソッドのパラメータにも適用されます。

updaterメソッドは、次の2つの方法で使用できます。

  1. 現在の行の列値を更新します。 スクロール可能なResultSetオブジェクトでは、カーソルを順方向および逆方向に動かして絶対位置または現在の行との相対的な位置にもっていくことができます。 次のコード・フラグメントは、ResultSetオブジェクトrsの5行目にあるNAME列を更新し、続いてupdateRowメソッドを使用して、rsを取得したデータ・ソース表を更新します。
    
           rs.absolute(5); // moves the cursor to the fifth row of rs
           rs.updateString("NAME", "AINSWORTH"); // updates the
              // NAME column of row 5 to be AINSWORTH
           rs.updateRow(); // updates the row in the data source
    
     
  2. 列値を挿入行に挿入します。 更新可能なResultSetオブジェクトには、このオブジェクトに関連付けられた特殊な行があります。この行は、挿入する行を作成する準備領域の役目をします。 次のコード・フラグメントは、カーソルを挿入行に移動させ、3列の行を作成し、insertRowメソッドを使用してその行をrsおよびデータ・ソース表に挿入します。
    
           rs.moveToInsertRow(); // moves cursor to the insert row
           rs.updateString(1, "AINSWORTH"); // updates the
              // first column of the insert row to be AINSWORTH
           rs.updateInt(2,35); // updates the second column to be 35
           rs.updateBoolean(3, true); // updates the third column to true
           rs.insertRow();
           rs.moveToCurrentRow();
    
     

ResultSetオブジェクトは、このオブジェクトを生成したStatementオブジェクトが閉じられるとき、再実行されるとき、あるいは一連の複数の結果から次の結果を取り出すために使われるときに、自動的に閉じられます。

ResultSetオブジェクトの列の数、型、およびプロパティは、ResultSet.getMetaDataメソッドによって返されるResultSetMetaDataオブジェクトで提供されます。

導入されたバージョン:
1.1
関連項目: