JDBCTM 指南:入門5 - ResultSet
2020-06-01 23:27:08
供稿:網友
5 - ResultSet
本概述是從《JDBCTM Database Access from JavaTM: A Tutorial and Annotated Reference 》這本書中摘引來的。JavaSoft 目前正在準備這本書。這是一本教程,同時也是 JDBC 的重要參考手冊,它將作為 Java 系列的組成部份在 1997 年春季由 Addison-Wesley 出版公司出版。
5.1 概述
ResultSet 包含符合 SQL 語句中條件的所有行,并且它通過一套 get 方法(這些 get 方法可以訪問當前行中的不同列)提供了對這些行中數據的訪問。ResultSet.next 方法用于移動到 ResultSet 中的下一行,使下一行成為當前行。
結果集一般是一個表,其中有查詢所返回的列標題及相應的值。例如,如果查詢為 SELECT a, b, c FROM Table1,則結果集將具有如下形式:
a b c
-------- --------- --------
12345 Cupertino CA
83472 Redmond WA
83492 Boston MA
下面的代碼段是執行 SQL 語句的示例。該 SQL 語句將返回行集合,其中列 1 為 int,列 2 為 String,而列 3 則為字節數組:
java.sql.Statement stmt = conn.createStatement();
ResultSet r = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (r.next())
{
// 打印當前行的值。
int i = r.getInt("a");
String s = r.getString("b");
float f = r.getFloat("c");
System.out.println("ROW = " + i + " " + s + " " + f);
}
5.1.1 行和光標
ResultSet 維護指向其當前數據行的光標。每調用一次 next 方法,光標向下移動一行。最初它位于第一行之前,因此第一次調用 next 將把光標置于第一行上,使它成為當前行。隨著每次調用 next 導致光標向下移動一行,按照從上至下的次序獲取 ResultSet 行。
在 ResultSet 對象或其父輩 Statement 對象關閉之前,光標一直保持有效。
在 SQL 中,結果表的光標是有名字的。如果數據庫允許定位更新或定位刪除,則需要將光標的名字作為參數提供給更新或刪除命令。可通過調用方法 getCursorName 獲得光標名。
注意:不是所有的 DBMS 都支持定位更新和刪除。可使用 DatabaseMetaData.supportsPositionedDelete 和 supportsPositionedUpdate 方法來檢查特定連接是否支持這些操作。當支持這些操作時,DBMS/驅動程序必須確保適當鎖定選定行,以使定位更新不會導致更新異常或其它并發問題。
5.1.2 列
方法 getXXX 提供了獲取當前行中某列值的途徑。在每一行內,可按任何次序獲取列值。但為了保證可移植性,應該從左至右獲取列值,并且一次性地讀取列值。
列名或列號可用于標識要從中獲取數據的列。例如,如果 ResultSet 對象 rs 的第二列名為“title”,并將值存儲為字符串,則下列任一代碼將獲取存儲在該列中的值:
String s = rs.getString("title");
String s = rs.getString(2);