JDBC API 2.0 簡介

9.2  JDBC API 2.0 簡介
9.2.1  新的記錄集接口(ResultSet接口)
1 新定義了若干個常數
這些常數用於指定ResultSet的類型 遊標移動的方向等性質 如下所示 
public static final int FETCH_FORWARD;
public static final int FETCH_REVERSE;
public static final int FETCH_UNKNOWN;
public static final int TYPE_FORWARD_ONLY;
public static final int TYPE_SCROLL_INSENSITIVE;
public static final int TYPE_SCROLL_SENSITIVE;
public static final int CONCUR_READ_ONLY;
public static final int CONCUR_UPDATABLE;
FETCH_FORWORD 該常數的作用是指定處理記錄集中行的順序是由前到後 即從第一行開始處理 一直到最後一行 
FETCH_REVERSE 該常數的作用是指定處理記錄集中行的順序是由後到前 即從後一行開始處理 一直到第一行 
FETCH_UNKNOWN 該常數的作用是不指定處理記錄集中行的順序 由 JDBC 驅動程序和數據庫系統決定 
TYPE_FORWARD_ONLY 該常數的作用是指定數據庫遊標的移動方向是向前 不允許向後移動 即只能使用ResultSet接口的next()方法 而不能使用 previous()方法 否則會產生錯誤 
TYPE_SCROLL_INSENSITIVE 該常數的作用是指定數據庫遊標可以在記錄集中前後
移動 並且當前數據庫用戶獲取的記錄集對其他用戶的操作不敏感 就是說 當前用戶正
在瀏覽記錄集中的數據 與此同時 其他用戶更新了數據庫中的數據 但是當前用戶所獲
取的記錄集中的數據不會受到任何影響 
TYPE_SCROLL_SENSITIVE 該常數的作用是指定數據庫遊標可以在記錄集中前後移動 並且當前數據庫用戶獲取的記錄集對其他用戶的操作敏感 就是說 當前用戶正在瀏覽記錄集 但是其它用戶的操作使數據庫中的數據發生了變化 當前用戶所獲取的記錄集中的數據也會同步發生變化 這樣有可能會導致非常嚴重的錯誤產生 建議慎重使用該常數 
CONCUR_READ_ONLY 該常數的作用是指定當前記錄集的協作方式(concurrency mode)爲只讀 一旦使用了這個常數 那麼用戶就不可以更新記錄集中的數據  CONCUR_UPDATABLE 該常數的作用是指定當前記錄集的協作方式(concurrency mode)爲可以更新 一旦使用了這個常數 那麼用戶就可以使用 updateXXX()等方法更新記錄集中的數據 
2 ResultSet接口提供了一整套的定位方法
這些可以在記錄集中定位到任意一行 具體有 
public boolean absolute(int  row);  該方法的作用是將記錄集中的某一行設定爲當前行 亦即將數據庫遊標移動到指定的行 參數 row指定了目標行的行號 這是絕對的行號由記錄集的第一行開始計算 不是相對的行號 
public boolean relative(int  rows);  該方法的作用也是將記錄集中的某一行設定爲當前行 但是它的參數 rows表示目標行相對於當前行的行號 例如當前行是第3行 現在需要移動到第5行去 既可以使用absolute()方法 也可以使用 relative()方法 代碼如下 
例 
rs.absolute(5);
或者
rs.relative(2);
其中rs代表ResultSet接口的實例對象 
又如當前行是第5行 需要移動到第 3行去 代碼如下 
例 
rs.absolute(3);
或者
rs.relative(-2);
其中rs代表ResultSet接口的實例對象 
讀者需要注意的問題是 傳遞給 relative()方法的參數 如果是正數 那麼數據庫遊標向前移動 如果是負數 那麼數據庫遊標向後移動 
注意 在本章中所說的數據庫遊標向前移動是指向行號增大的方向移動 向後移動是指向行號減少的方向移動 
public boolean first();  該方法的作用是將當前行定位到數據庫記錄集的第一行 
public boolean last();  該方法的作用剛好和 first()方法相反 是將當前行定位到數據庫記錄集的最後一行 
public boolean isFirst();  該方法的作用是檢查當前行是否記錄集的第一行 如果是返回true 否則 返回false 
public boolean isLast();   該方法的作用是檢查當前行是否記錄集的最後一行 如果是 返回true 否則 返回false 
public void afterLast();  該方法的作用是將數據庫遊標移到記錄集的最後 位於記錄集最後一行的後面 如果該記錄集不包含任何的行 該方法不產生作用 
public void beforeFirst();   該方法的作用是將數據庫遊標移到記錄集的最前面 位於記錄集第一行的前面 如果記錄集不包含任何的行 該方法不產生作用 
public boolean isAfterLast();  該方法檢查數據庫遊標是否處於記錄集的最後面 如果是 返回true 否則 返回false 
public boolean isBeforeFirst();  該方法檢查數據庫遊標是否處於記錄集的最前面 如果是 返回true 否則 返回false 
public boolean next();  該方法的作用是將數據庫遊標向前移動一位 使得下一行成爲當前行 當剛剛打開記錄集對象時 數據庫遊標的位置在記錄集的最前面 第一次使用 next()方法 將會使數據庫遊標定位到記錄集的第一行 第二次使用 next()方法 將會使數據庫遊標定位到記錄集的第二行 以此類推 
注意 如果在當前行打開了一個輸入流(Input Stream) 那麼再次使用 next()方法時將會自動關閉該輸入流 
public boolean previous();  該方法的作用是將數據庫遊標向後移動一位 使得上一行成爲當前行 
3 ResultSet接口添加了對行操作的支持
使用JDBC API 2.0 不僅可以任意將數據庫遊標定位到記錄集中的特定行 而且還可以使用ResultSet接口新定義的一套方法更新當前行的數據 在以前 如果Java程序員希望更新記錄集中某行的數據 必鬚髮送 SQL 語句給數據庫 程序員需要在 Java 代碼中嵌入冗長的SQL語句 用以執行 UPDATE DELETE INSERT 等數據庫操作 但是 當JDBC API 2.0 出現時 一切就都改變了 程序員已經可以部分拋開 SQL語言 享受Java編程的樂趣了 ResultSet接口中新添加的部分方法如下所示 
public boolean rowDeleted();  如果當前記錄集的某行被刪除了 那麼記錄集中將會留
出一個空位 調用rowDeleted()方法 如果探測到空位的存在 那麼就返回 true 如果沒有探測到空位的存在 就返回false值 
public boolean rowInserted();   如果當前記錄集中插入了一個新行 該方法將返回true 否則返回false 
public boolean rowUpdated();   如果當前記錄集的當前行的數據被更新 該方法返回true 否則返回false 
public void insertRow();   該方法將執行插入一個新行到當前記錄集的操作 
public void updateRow();   該方法將更新當前記錄集當前行的數據 
public void deleteRow();  該方法將刪除當前記錄集的當前行 
public void updateString(int columnIndex String x);  該方法更新當前記錄集當前行某列的值 該列的數據類型是 String(指 Java 數據類型是 String 與之對應的 JDBC 數據類型是VARCHAR或NVARCHAR 等數據類型) 該方法的參數 columnIndex指定所要更新的列的列索引 第一列的列索引是 1 以此類推 第二個參數 x 代表新的值 這個方法並不執行數據庫操作 需要執行 insertRow()方法或者 updateRow()方法以後 記錄集和數據庫中的數據才能夠真正更新 
public void updateString(String    columnName String    x);  該方法和上面介紹的同名方法差不多 不過該方法的第一個參數是 columnName 代表需要更新的列的列名 而不是columnIndex 
ResultSet 接口中還定義了很多個 updateXXX()方法 都和上面的兩個方法相類似 由於篇幅的原因 在這裏就不詳細描述了 對此感興趣的讀者 可以參考相關的文獻 
往數據庫當前記錄集插入新行的操作流程如下 
1 調用moveToInsertRow()方法 
2 調用updateXXX()方法 指定插入行各列的值 
3 調用insertRow()方法 往數據庫中插入新的行 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章