鍍金池/ 教程/ Java/ JDBC結果集
JDBC Like子句實例
JDBC異常
JDBC排序數據實例
JDBC事務保存點(setSavepoint, releaseSavepoint )實例
JDBC結果集
JDBC Statement對象執(zhí)行批量處理實例
JDBC事務
JDBC SQL語法
JDBC快速入門教程
JDBC創(chuàng)建數據庫實例
JDBC流ASCII和二進制數據
JDBC刪除表實例
JDBC Statements, PreparedStatement和CallableStatement語句
JDBC WHERE子句條件實例
JDBC插入數據實例
JDBC驅動程序類型
JDBC環(huán)境配置
JDBC數據庫連接
JDBC刪除數據實例
JDBC PrepareStatement對象執(zhí)行批量處理實例
JDBC刪除數據庫實例
JDBC事務提交/回滾實例
JDBC更新數據實例
JDBC存儲過程調用
JDBC教程
JDBC批量處理
JDBC創(chuàng)建表實例
JDBC數據類型
JDBC是什么?
JDBC簡單示例代碼
JDBC選擇數據庫實例
JDBC查詢數據實例

JDBC結果集

SQL語句執(zhí)行后從數據庫查詢讀取數據,返回的數據放在結果集中。 SELECT語句用于從數據庫中選擇行并在結果集中查看它們的標準方法。 java.sql.ResultSet接口表示數據庫查詢的結果集。

ResultSet對象維護指向結果集中當前行的游標。 術語“結果集”是指包含在ResultSet對象中的行和列數據。

ResultSet接口的方法可以分為三類:

  • 瀏覽方法:用于移動光標。
  • 獲取方法:用于查看光標指向的當前行的列中的數據。
  • 更新方法:用于更新當前行的列中的數據。 然后在基礎數據庫中更新數據。

光標可以基于ResultSet的屬性移動。當創(chuàng)建生成ResultSet的相應Statement時,將指定這些屬性。

JDBC提供以下連接方法來創(chuàng)建具有所需ResultSet的語句 -

  • createStatement(int RSType, int RSConcurrency);
  • prepareStatement(String SQL, int RSType, int RSConcurrency);
  • prepareCall(String sql, int RSType, int RSConcurrency);

第一個參數表示ResultSet對象的類型,第二個參數是兩個ResultSet常量之一,用于指定結果集是只讀還是可更新。

ResultSet類型

可能的RSType值如下。如果不指定任何ResultSet類型,將自動分配一個TYPE_FORWARD_ONLY值。

類型 描述
ResultSet.TYPE_FORWARD_ONLY 光標只能在結果集中向前移動。
ResultSet.TYPE_SCROLL_INSENSITIVE 光標可以向前和向后滾動,結果集對創(chuàng)建結果集后發(fā)生的數據庫所做的更改不敏感。
ResultSet.TYPE_SCROLL_SENSITIVE 光標可以向前和向后滾動,結果集對創(chuàng)建結果集之后發(fā)生的其他數據庫的更改敏感。

ResultSet的并發(fā)性

可能的RSConcurrency如下。 如果不指定任何并發(fā)類型,將自動獲得一個CONCUR_READ_ONLY值。

并發(fā) 描述
ResultSet.CONCUR_READ_ONLY 創(chuàng)建只讀結果集,這是默認值。
ResultSet.CONCUR_UPDATABLE 創(chuàng)建可更新的結果集

到目前為止我們寫的所有例子可以寫成如下,它初始化一個Statement對象來創(chuàng)建一個只向前的只讀ResultSet對象 -

try {
   Statement stmt = conn.createStatement(
                           ResultSet.TYPE_FORWARD_ONLY,
                           ResultSet.CONCUR_READ_ONLY);
}
catch(Exception ex) {
   ....
}
finally {
   ....
}

瀏覽結果集

ResultSet接口中有幾種涉及移動光標的方法,包括 -

編號 方法 描述
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 如果光標當前位于插入行,則將光標移回當前行; 否則,此方法什么也不做

為了更好的理解,建議學習瀏覽記錄示例代碼

查看結果集

ResultSet接口包含數十種獲取當前行數據的方法。

每個可能的數據類型都有一個get方法,每個get方法有兩個版本 -

  • 一個是采用列名稱。
  • 另一個采用列索引。

例如,如果對查看感興趣的列包含一個int,則需要使用ResultSet的其中一個getInt()方法 -

序號 方法 描述
1 public int getInt(String columnName) throws SQLException 返回名為columnName的列中當前行中的int值。
2 public int getInt(int columnIndex) throws SQLException 返回指定列索引當前行中的int值。列索引從1開始,意味著行的第一列為1,行的第二列為2,依此類推。

類似地,在八個Java基元類型中的每一個的ResultSet接口中都有get方法,以及常見的類型,如java.lang.String,java.lang.Objectjava.net.URL等。

還有一些方法可以獲取SQL數據類型java.sql.Date,java.sql.Time,java.sql.TimeStamp,java.sql.Clobjava.sql.Blob。查看文檔以獲取有關使用這些SQL數據類型的更多信息。

為了更好的理解,建議學習研究查看結果集示例代碼

更新結果集

ResultSet接口包含用于更新結果集的數據的更新方法的集合。

與get方法一樣,每種數據類型都有兩種更新方法 -

  • 一個是采用列名稱。
  • 另一個采用列索引。

例如,要更新結果集當前行的String列,可以使用以下updateString()方法之一:

序號 方法 描述
1 public void updateString(int columnIndex, String s) throws SQLException 將指定列中的String值更改為指定的s值。
2 public void updateString(String columnName, String s) throws SQLException 與前前的方法類似,除了使用列的名稱而不是列的索引指定。

有八種基本數據類型的更新方法,以及java.sql包中的String,Object,URL和SQL數據類型。

更新結果集中的一行會更改ResultSet對象中當前行的列,但不會更改底層數據庫中的列的值。 要更新數據庫中的行,需要調用以下方法之一。

序號 方法 描述
1 public void updateRow() 更新數據庫中當前行
2 public void deleteRow() 從數據庫中刪除當前行
3 public void refreshRow() 刷新結果集中的數據以反映數據庫中最近的任何更改。
4 public void cancelRowUpdates() 取消對當前行所做的任何更新。
5 public void insertRow() 在數據庫中插入一行。 只有當光標指向插入行時,才能調用此方法。

為了更好的理解,建議您學習研究“更新結果集示例代碼