JDBC-結果セット
データベースクエリからデータを読み取るSQLステートメントは、結果セットでデータを返します。SELECTステートメントは、データベースから行を選択して結果セットに表示するための標準的な方法です。java.sql.ResultSetのインターフェースは、データベースクエリの結果セットを表します。
ResultSetオブジェクトは、結果セットの現在の行を指すカーソルを維持します。「結果セット」という用語は、ResultSetオブジェクトに含まれる行と列のデータを指します。
ResultSetインターフェイスのメソッドは、3つのカテゴリに分類できます-
Navigational methods: カーソルを移動するために使用されます。
Get methods: カーソルが指している現在の行の列のデータを表示するために使用されます。
Update methods:現在の行の列のデータを更新するために使用されます。その後、更新は基礎となるデータベースでも更新できます。
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定数の1つです。
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 | 更新可能な結果セットを作成します。 |
これまでに記述したすべての例は、次のように記述できます。これにより、Statementオブジェクトが初期化され、転送専用、読み取り専用のResultSetオブジェクトが作成されます。
try {
Statement stmt = conn.createStatement(
ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
}
catch(Exception ex) {
....
}
finally {
....
}
結果セットのナビゲート
ResultSetインターフェースには、カーソルの移動を伴ういくつかのメソッドがあります。
SN | 方法と説明 |
---|---|
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
カーソルが現在挿入行にある場合は、カーソルを現在の行に戻します。それ以外の場合、このメソッドは何もしません |
理解を深めるために、Navigate-サンプルコードを調べてみましょう。
結果セットの表示
ResultSetインターフェースには、現在の行のデータを取得するための数十のメソッドが含まれています。
可能なデータ型ごとにgetメソッドがあり、各getメソッドには2つのバージョンがあります-
列名を取り込むもの。
列インデックスを取り込むもの。
たとえば、表示したい列にintが含まれている場合は、ResultSet −のgetInt()メソッドの1つを使用する必要があります。
SN | 方法と説明 |
---|---|
1 | public int getInt(String columnName) throws SQLException
columnNameという名前の列の現在の行のintを返します。 |
2 | public int getInt(int columnIndex) throws SQLException
指定された列インデックスの現在の行のintを返します。列インデックスは1から始まります。つまり、行の最初の列は1であり、行の2番目の列は2です。 |
同様に、ResultSetインターフェースには、8つのJavaプリミティブ型のそれぞれのgetメソッドと、java.lang.String、java.lang.Object、java.net.URLなどの一般的な型があります。
SQLデータタイプjava.sql.Date、java.sql.Time、java.sql.TimeStamp、java.sql.Clob、およびjava.sql.Blobを取得するためのメソッドもあります。これらのSQLデータ型の使用の詳細については、ドキュメントを確認してください。
理解を深めるために、表示-サンプルコードを調べてみましょう。
結果セットの更新
ResultSetインターフェイスには、結果セットのデータを更新するための更新メソッドのコレクションが含まれています。
getメソッドと同様に、データ型ごとに2つの更新メソッドがあります。
列名を取り込むもの。
列インデックスを取り込むもの。
たとえば、結果セットの現在の行の文字列列を更新するには、次のupdateString()メソッドのいずれかを使用します。
SN | 方法と説明 |
---|---|
1 | public void updateString(int columnIndex, String s) throws SQLException
指定された列の文字列をsの値に変更します。 |
2 | public void updateString(String columnName, String s) throws SQLException
列がインデックスではなく名前で指定されることを除いて、前の方法と同様です。 |
java.sqlパッケージには、8つのプリミティブデータ型の更新メソッドと、文字列、オブジェクト、URL、およびSQLデータ型があります。
結果セットの行を更新すると、ResultSetオブジェクトの現在の行の列が変更されますが、基になるデータベースでは変更されません。データベースの行への変更を更新するには、次のいずれかのメソッドを呼び出す必要があります。
SN | 方法と説明 |
---|---|
1 | public void updateRow()
データベース内の対応する行を更新することにより、現在の行を更新します。 |
2 | public void deleteRow()
データベースから現在の行を削除します |
3 | public void refreshRow()
結果セットのデータを更新して、データベースの最近の変更を反映します。 |
4 | public void cancelRowUpdates()
現在の行で行われた更新をキャンセルします。 |
5 | public void insertRow()
データベースに行を挿入します。このメソッドは、カーソルが挿入行を指している場合にのみ呼び出すことができます。 |
理解を深めるために、更新-サンプルコードを調べてみましょう。