java.sql public interface ResultSet
java.sql public interface ResultSet
extends Wrapper, AutoCloseable
表示資料庫結果集的資料表,通常通過執行查詢資料庫的語句生成。
ResultSet物件維護一個指向其當前資料行的遊標。 最初游標位於第一行之前。 next方法將游標移動到下一行,因為當ResultSet物件中沒有更多行時它返回false ,所以可以在while迴圈中使用它來遍歷結果集。
預設的ResultSet物件是不可更新的,並且有一個只能向前移動的遊標。 因此,您只能遍歷它一次,並且只能從第一行到最後一行。 可以生成可滾動和/或可更新的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方法( getBoolean 、 getLong等)。 可以使用列的索引號或列名來檢索值。 一般來說,使用列索引會更有效率。 列從 1 開始編號。為了獲得最大的可移植性,應按從左到右的順序讀取每行中的結果集列,並且每列應僅讀取一次。
對於 getter 方法,JDBC 驅動程式嘗試將底層資料轉換為 getter 方法中指定的 Java 型別並返回合適的 Java 值。 JDBC 規範有一個表,顯示了從 SQL 型別到可由ResultSet getter 方法使用的 Java 型別的允許對映。
用作 getter 方法輸入的列名不區分大小寫。 當使用列名呼叫 getter 方法並且多個列具有相同名稱時,將返回第一個匹配列的值。 列名選項旨在在生成結果集的 SQL 查詢中使用列名時使用。 對於查詢中未明確命名的列,最好使用列號。 如果使用列名,程式設計師應該注意確保它們唯一地引用預期的列,這可以通過 SQL AS子句來保證。
JDBC 2.0 API(Java™ 2 SDK,標準版,1.2 版)中的此介面添加了一組更新程式方法。 有關 getter 方法引數的註釋也適用於 updater 方法的引數。
更新程式方法可以通過兩種方式使用:
更新當前行中的列值。 在可滾動的ResultSet物件中,游標可以前後移動、移動到絕對位置或相對於當前行的位置。 以下程式碼片段更新ResultSet物件rs第五行中的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
將列值插入插入行。 可更新的ResultSet物件有一個與之關聯的特殊行,用作構建要插入的行的暫存區。 以下程式碼片段將游標移動到插入行,構建一個三列行,然後使用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();
當生成它的Statement物件關閉、重新執行或用於從多個結果序列中檢索下一個結果時, ResultSet物件將自動關閉。
ResultSet物件的列的數量、型別和屬性由ResultSet.getMetaData方法返回的ResultSetMetaData物件提供。
另見:
Statement.executeQuery , Statement.getResultSet , ResultSetMetaData
< 1.8 >