English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JDBC リセットセット(ResultSet)

データベースからのクエリから読み取られるSQL文は、結果セットにデータを返します。SELECT文は、データベースから行を選択し、それらを結果セットで確認する標準的な方法です。Sql.ResultSetインターフェースは、データベースクエリの結果セットを表します。

ResultSetオブジェクトは、結果セット内の現在の行のポインタを維持します。「結果セット(result set)」という用語は、ResultSetオブジェクトに含まれる行と列データを指します。

ResultSetインターフェースのメソッドは、3つのカテゴリーに分類されます。-

  • ナビゲーションメソッド: カーソルを左右に移動するために使用されます。

  • Getメソッド: カーソルが指している現在の行の列のデータを確認するために使用されます。

  • Updateメソッド:現在の行の各列のデータを更新するために使用されます。その後、更新は基盤データベースで更新することもできます。

カーソルはResultSetの属性に基づいて移動できます。これらの属性は、対応する生成ResultSetのStatementを作成したときに指定されます。

JDBCは以下のメソッドを提供して、必要なResultSetを持つ文を作成します。-

  • createStatement(int RSType, int RSConcurrency);

  • prepareStatement(String SQL, int RSType, int RSConcurrency);

  • prepareCall(String sql, int RSType, int RSConcurrency);

最初の引数はResultSetオブジェクトのタイプを示し、2つ目の引数はResultSetの常量のいずれかで、結果セットが読み取り専用であるか更新可能であるかを指定します。

結果セットのタイプ

以下に示されるRSTypeが可能です。ResultSetのタイプを指定しない場合、自動的にTYPE_FORWARD_ONLYタイプの結果セットが取得されます。

タイプ説明
ResultSet.TYPE_FORWARD_ONLY

カーソルは結果セット内で前にのみ移動できます。

ResultSet.TYPE_SCROLL_INSENSITIVE

カーソルは前後双方にスクロールすることができ、結果セットは他の人が結果セットを作成した後にデータベースで行った変更に反応しません。

ResultSet.TYPE_SCROLL_SENSITIVE.

カーソルは前後にスクロール可能で、結果セットは他の人が結果セットの作成後にデータベースに対して行った変更に非常に敏感です。

ResultSetの並行

以下にRSConcurrencyが示されています。並行型を指定しない場合、自動的にCONCUR_READ_ONLYタイプが取得されます。

並行説明
ResultSet.CONCUR_READ_ONLY

只読み結果セットを作成します。これはデフォルトの値です。

ResultSet.CONCUR_UPDATABLE

更新可能な結果セットを作成します。

これまでに書いたすべての例は以下のように書けることができます。この例では、只読みのResultSetオブジェクトを作成するためのStatementオブジェクトを初期化します。-

try {
   Statement stmt = conn.createStatement(
                           ResultSet.TYPE_FORWARD_ONLY,
                           ResultSet.CONCUR_READ_ONLY);
}
catch(Exception ex) {
   ....
}
finally {
   ....
}

結果セットのナビゲーション

ResultSetインターフェースには、カーソルの移動に関連する方法がいくつかあります。-

番号方法と説明
1public void beforeFirst() throws SQLException

カーソルを最初の行の前に移動します。

2public void afterLast() throws SQLException

カーソルを最後の行の次に移動します。

3public boolean first() throws SQLException

カーソルを最初の行に移動します。

4public void last() throws SQLException

カーソルを最後の行に移動します。

5public boolean absolute(int row) throws SQLException

カーソルを指定された行に移動します。

6public boolean relative(int row) throws SQLException

カーソルを指定された行数分前に進めます。現在の位置から移動します。

7public boolean previous() throws SQLException

カーソルを前の行に移動します。前の行が結果セットにない場合、このメソッドはfalseを返します。

8public boolean next() throws SQLException

カーソルを次の行に移動します。結果セットにさらに行がない場合、このメソッドはfalseを返します。

9public int getRow() throws SQLException

カーソルが指している行の行番号を返します。

10public void moveToInsertRow() throws SQLException

カーソルを結果セットの特別な行に移動します。この行は、データベースに新しい行を挿入するために使用できます。現在のカーソル位置を覚えておきます。

11public void moveToCurrentRow() throws SQLException

カーソルが現在行に位置している場合、カーソルを現在行に戻します;そうでない場合、このメソッドは何も行いません。

よりよく理解するためには、以下を研究しましょう「ナビゲーション-例文コード

結果セットを確認する

ResultSetインターフェースには、現在行のデータを取得するための多くのメソッドが含まれています。

各データタイプにはgetメソッドがあり、各getメソッドには2つのバージョンがあります。-

  • 列名を持つ列。

  • 列インデックスを持つインデックス。

例えば、興味のある列がintを持っている場合、ResultSetのgetInt()メソッドのいずれかを使用する必要があります。

番号方法と説明
1public int getInt(String columnName) throws SQLException

現在行のcolumnName名の列のintを返します。

2public int getInt(int columnIndex) throws SQLException

指定された列インデックスの現在行の整数を返します。列インデックスは1から始まる、これは行の最初の列が意味することです。1と続きがあります。2と続きがあります。

同様に、ResultSetインターフェースでは、8種類のJava基本タイプの各種、および一般的なタイプ(java.lang.String、java.lang.Object、java.net.URLなど)に対して、getメソッドがあります。

java.sql.Date、java.sql.Time、java.sql.Timestamp、java.sql.Clob、java.sql.BlobなどのSQLデータタイプを取得するための方法もあります。これらのSQLデータタイプの使用に関する詳細は、ドキュメントを確認してください。

よりよく理解するために、以下を研究しましょう確認する-例文コード

結果セットを更新する

ResultSetインターフェースには、結果セットデータを更新するためのメソッドのセットが含まれています。

getメソッドと同様に、各データタイプには2つの更新メソッドがあります。-

  • 列名を持つ列。

  • 列インデックスを持つインデックス。

例えば、結果セットの現在行のString列を更新するには、以下のupdateString()メソッドのいずれかを使用できます。-

番号方法と説明
1public void updateString(int columnIndex, String s) throws SQLException

指定された列のStringをsの値に変更します。

2public void updateString(String columnName, String s) throws SQLException

前のメソッドと同様ですが、列はインデックスではなく名前で指定されます。

java.sqlパッケージには、String、Object、URL、およびSQLデータ型の更新メソッドとともに、8種類の原始データ型があります。

結果セット内の一行を更新することで、ResultSetオブジェクト内の現在の行の列が変更されますが、基本データベース内の行は変更されません。データベース内の行の変更を更新するには、以下のいずれかのメソッドを呼び出す必要があります。

番号方法と説明
1public void updateRow()

データベース内の対応する行を更新することで、現在の行を更新します。

2public void deleteRow()

データベースから現在の行を削除します。

3public void refreshRow()

結果セット内のデータをリフレッシュし、データベース内の最新の変更を反映します。

4public void cancelRowUpdates()

現在の行に対して行われた任何の更新をキャンセルします。

5public void insertRow()

データベースに一行を挿入します。このメソッドを呼び出すことができるのは、カーソルが挿入行に指しているときだけです。

よりよく理解するためには、以下を研究しましょう「サンプルコードの更新