Jdbc-result-sets
JDBC-結果セット
データベースクエリからデータを読み取るSQLステートメントは、結果セットでデータを返します。 SELECTステートメントは、データベースから行を選択して結果セットで表示するための標準的な方法です。 _java.sql.ResultSet_インターフェイスは、データベースクエリの結果セットを表します。
ResultSetオブジェクトは、結果セットの現在の行を指すカーソルを保持します。 「結果セット」という用語は、ResultSetオブジェクトに含まれる行と列のデータを指します。
ResultSetインターフェイスのメソッドは、3つのカテゴリに分類することができます-
- *ナビゲーション方法:*カーソルを移動するために使用されます。
- * Getメソッド:*カーソルが指している現在の行の列のデータを表示するために使用されます。
- *更新方法:*現在の行の列のデータを更新するために使用されます。 更新は、基礎となるデータベースでも同様に更新できます。
カーソルは、ResultSetのプロパティに基づいて移動できます。 これらのプロパティは、ResultSetを生成する対応するステートメントが作成されるときに指定されます。
JDBCは、目的のResultSetでステートメントを作成するために次の接続メソッドを提供します-
- createStatement(int RSType、int RSConcurrency);
- prepareStatement(String SQL、int RSType、int RSConcurrency);
- prepareCall(String sql、int RSType、int RSConcurrency);
最初の引数はResultSetオブジェクトのタイプを示し、2番目の引数は結果セットが読み取り専用か更新可能かを指定する2つのResultSet定数のいずれかです。
ResultSetのタイプ
可能なRSTypeを以下に示します。 ResultSetタイプを指定しない場合、TYPE_FORWARD_ONLYのタイプが自動的に取得されます。
Type | Description |
---|---|
ResultSet.TYPE_FORWARD_ONLY | The cursor can only move forward in the result set. |
ResultSet.TYPE_SCROLL_INSENSITIVE | The cursor can scroll forward and backward, and the result set is not sensitive to changes made by others to the database that occur after the result set was created. |
ResultSet.TYPE_SCROLL_SENSITIVE. | The cursor can scroll forward and backward, and the result set is sensitive to changes made by others to the database that occur after the result set was created. |
ResultSetの同時実行性
可能なRSConcurrencyを以下に示します。 同時実行タイプを指定しない場合、CONCUR_READ_ONLYの1つが自動的に取得されます。
Concurrency | Description |
---|---|
ResultSet.CONCUR_READ_ONLY | Creates a read-only result set. This is the default |
ResultSet.CONCUR_UPDATABLE | Creates an updateable result set. |
これまでに記述したすべての例は、次のように記述できます。これは、Statementオブジェクトを初期化して、前方専用の読み取り専用ResultSetオブジェクトを作成します-
try {
Statement stmt = conn.createStatement(
ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
}
catch(Exception ex) {
....
}
finally {
....
}
結果セットのナビゲート
ResultSetインターフェイスには、カーソルの移動を含むいくつかのメソッドがあります。
S.N. | Methods & Description |
---|---|
1 |
public void beforeFirst() throws SQLException カーソルを最初の行の直前に移動します。 |
2 |
public void afterLast() throws SQLException カーソルを最後の行の直後に移動します。 |
3 |
public boolean first() throws SQLException カーソルを最初の行に移動します。 |
4 |
public void last() throws SQLException カーソルを最後の行に移動します。 |
5 |
public boolean absolute(int row) throws SQLException カーソルを指定された行に移動します。 |
6 |
public boolean relative(int row) throws SQLException 現在のカーソル位置から、指定した行数だけカーソルを前後に移動します。 |
7 |
public boolean previous() throws SQLException カーソルを前の行に移動します。 前の行が結果セットから外れている場合、このメソッドはfalseを返します。 |
8 |
public boolean next() throws SQLException カーソルを次の行に移動します。 結果セットに行がもうない場合、このメソッドはfalseを返します。 |
9 |
public int getRow() throws SQLException カーソルが指している行番号を返します。 |
10 |
public void moveToInsertRow() throws SQLException データベースに新しい行を挿入するために使用できる結果セット内の特別な行にカーソルを移動します。 現在のカーソル位置が記憶されます。 |
11 |
public void moveToCurrentRow() throws SQLException カーソルが現在挿入行にある場合、カーソルを現在の行に戻します。それ以外の場合、このメソッドは何もしません |
理解を深めるために、link:/jdbc/navigate-result-sets [Navigate-Example Code]を調べてみましょう。
結果セットの表示
ResultSetインターフェースには、現在の行のデータを取得するための多数のメソッドが含まれています。
可能なデータ型ごとにgetメソッドがあり、各getメソッドには2つのバージョンがあります-
- 列名を受け取るもの。 *列インデックスを受け取るもの。
たとえば、表示したい列にintが含まれている場合、ResultSetのgetInt()メソッドの1つを使用する必要があります-
S.N. | Methods & Description |
---|---|
1 |
columnNameという名前の列の現在の行のintを返します。 |
2 |
public int getInt(int columnIndex) throws SQLException 指定された列インデックスの現在の行のintを返します。 列のインデックスは1から始まり、行の最初の列は1、行の2番目の列は2というようになります。 |
同様に、8つのJavaプリミティブ型のそれぞれと、java.lang.String、java.lang.Object、java.net.URLなどの一般的な型のResultSetインターフェイスにgetメソッドがあります。
SQLデータ型java.sql.Date、java.sql.Time、java.sql.TimeStamp、java.sql.Clob、およびjava.sql.Blobを取得するメソッドもあります。 これらのSQLデータ型の使用に関する詳細については、ドキュメントを確認してください。
よりよく理解するために、link:/jdbc/viewing-result-sets [Viewing-Example Code]を調べてみましょう。
結果セットの更新
ResultSetインターフェースには、結果セットのデータを更新するための更新メソッドのコレクションが含まれています。
getメソッドと同様に、各データ型には2つの更新メソッドがあります-
- 列名を受け取るもの。 *列インデックスを受け取るもの。
たとえば、結果セットの現在の行の文字列列を更新するには、次のいずれかのupdateString()メソッドを使用します-
S.N. | Methods & Description |
---|---|
1 |
指定された列の文字列をsの値に変更します。 |
2 |
public void updateString(String columnName, String s) throws SQLException 前のメソッドに似ていますが、列がインデックスではなく名前で指定される点が異なります。 |
java.sqlパッケージには、8つのプリミティブデータ型のほか、String、Object、URL、SQLデータ型の更新メソッドがあります。
結果セットの行を更新すると、ResultSetオブジェクトの現在の行の列が変更されますが、基になるデータベースの列は変更されません。 データベースの行に対する変更を更新するには、次のいずれかのメソッドを呼び出す必要があります。
S.N. | Methods & Description |
---|---|
1 |
public void updateRow() データベース内の対応する行を更新することにより、現在の行を更新します。 |
2 |
public void deleteRow() データベースから現在の行を削除します |
3 |
public void refreshRow() データベースの最近の変更を反映するために、結果セットのデータを更新します。 |
4 |
public void cancelRowUpdates() 現在の行で行われた更新をキャンセルします。 |
5 |
public void insertRow() データベースに行を挿入します。 このメソッドは、カーソルが挿入行を指している場合にのみ呼び出すことができます。 |
よりよく理解するために、リンク:/jdbc/updating-result-sets [Updating-Example Code]を調べてみましょう。