ResultSet
•public interface ResultSet
[pre]
ResultSet 對象具有指向其當前數據行的指針。最初,指針被置於第一行之前。next 方法將指針移動到下一行;因為該方法在 ResultSet 對象中沒有下一行時返回 false,所以可以在 while 循環中使用它來疊代結果集。
默認的 ResultSet 對象不可更新,僅有一個向前移動的指針。因此,只能疊代它一次,並且只能按從第一行到最後一行的順序進行。可以生成可滾動和/或可更新的 ResultSet 對象。以下代碼片段(其中 con 為有效的 Connection 對象)演示了如何生成可滾動且不受其他更新影響的、可更新的結果集。請參閱 ResultSet 欄位以了解其他選項。
[pre]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 接口提供用於從當前行檢索列值的獲取方法(getBoolean、getLong 等)。可以使用列的索引編號或列的名稱檢索值。一般情況下,使用列索引較為高效。列從 1 開始編號。為了獲得最大的可移植性,應該按從左到右的順序讀取每行中的結果集列,而且每列只能讀取一次。
對於獲取方法,JDBC 驅動程式嘗試將基礎數據轉換為在獲取方法中指定的 Java 類型,並返回適當的 Java 值。JDBC 規範有一個表,顯示允許的從 SQL 類型到供 ResultSet 獲取方法使用的 Java 類型的映射關係。
用作獲取方法的輸入的列名稱不區分大小寫。用列名稱調用獲取方法時,如果多個列具有這一名稱,則返回第一個匹配列的值。列名稱選項在生成結果集的 SQL 查詢中使用列名稱時使用。對於沒有在查詢中顯式命名的列,最好使用列編號。如果使用列名稱,程式設計師無法保證名稱實際所指的就是預期的列。
在 JDBC 2.0 API (JDK 1.2) 中,此接口添加了一組更新方法。關於獲取方法參數的注釋同樣適用於更新方法的參數。
可以用以下兩種方式使用更新方法:
更新當前行中的列值。在可滾動的 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 對象具有一個與其關聯的特殊行,該行用作構建要插入的行的暫存區域 (staging area)。以下代碼片段將指針移動到插入行,構建一個三列的行,並使用方法 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();
1.更新當前行中的列值。在可滾動的 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
2.將列值插入到插入行中。可更新的 ResultSet 對象具有一個與其關聯的特殊行,該行用作構建要插入的行的暫存區域 (staging area)。以下代碼片段將指針移動到插入行,構建一個三列的行,並使用方法 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 對象的列的編號、類型和屬性由 ResultSet.getMetaData 方法返回的 ResulSetMetaData 對象提供。