可滾動、可更新的結果集(轉)
14.6 批處理
批處理也是一個為了減輕開發員負擔的設計,它不再需要開發員一次次進行類似的工作。它讓所有相類似的工作一起幹完,逐個處理的工作由後臺來完成。
14.6.1 批處理規範
JDBC升級到2.0後增強了Statement介面,使它能夠以批處理方式執行更新操作。批處理操作指的是一次可以提交多句更新語句,這些更新語句一起執行。批處理相對逐句提交,使效能大幅度提高。它的具體方法步驟如下:
con.setAutoCommit(false); |
14.6.2 批處理舉例
看下面的程式,在程式中進一步學習批處理:
//引入SQL包
import java.sql.*;
public class Batch
{
public static void main(String args[])
{
try
{
//載入驅動程式
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//開啟資料庫連線,aaa為資料來源名稱
Connection con =DriverManager.getConnection("jdbc:odbc:aaa","","");
//進行批處理
con.setAutoCommit(false);
Statement st=con.createStatement();
//插入3條語句
st.addBatch("insert into emp
values('0002','lucy','analyst','
1-5月-2005',3500)");
st.addBatch("insert into emp
values('0011','tom','clerk','
18-3月-2007',1000)");
st.addBatch("insert into emp
values('0007','wangqiang','
analyst','12-12月-2006',2800)");
st.executeBatch();
con.commit();
//恢復autoCommit設定
con.setAutoCommit(true);
//關閉Statement物件
st.close();
//關閉Connection物件
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
14.7 結果集處理
在前面的例項程式中,都是假設結果集是隻讀的。在本節中,將學習如何對結果集進行處理。對結果集處理分為可滾動的和可更新的。可滾動是指顯示的結果集的遊標所在行既可以向前移又可以向後移,也可以移動到指定的特定行;可更新是指允許客戶程式對結果集中的資料進行修改。
14.7.1 可滾動結果集
JDBC驅動程式是否支援可滾動的結果集是由DatabaseMetaData物件決定的。DatabaseMetaData介面中定義了一個 supportsResultSetType(int type)方法,它的返回結果為boolean型,說明驅動程式所支援的結果型別。在實際的程式開發中,並不用DatabaseMetaData進行開 發,而是用Statement直接指定。如下面的程式程式碼:
Statement st=con.createStatement(type,concurrency); |
其中type也就是上面提到的那個type,它有3種類型。
TYPE_FORWARD_ONLY:結果集遊標只能向前移動。
TYPE_SCROLL_INSENSITIVE:可滾動,對資料變化不敏感。
TYPE_SCROLL_SENSITIVE:可滾動,對資料變化敏感。
對結果集進行操作就是對結果集的遊標進行操作,其中定義了很多的方法。
absolute(int row):把遊標移至給定的行。
afterLast():把遊標移動到最後一行後面。
beforeFirst():把遊標移動到第1行前面。
isAfterLast():判斷遊標是否在最後一行後面。
isBeforeFirst():判斷遊標是否在第1行前面。
first():把遊標移動到第1行。
last():把遊標移動到最後一行。
isFirst():判斷遊標是否在第1行。
isLast():判斷遊標是否在最後一行。
previous():把遊標移動到所在行的前一行。
next():把遊標移動到所在行的後一行。
relative():把遊標相對移動幾行。
getRow():獲取當前行數。
看下面的應用程式:
//引入SQL包 |
在本程式中,用到了一些方法,讀者也可以把其他的方法都用一下。
14.7.2 可更新結果集
在ResultSet類中,用getConcurrency方法來確定結果集是否為可更新的。ResultSet介面中有很多的更新方法,介紹如下。
updateBoolean():用布林型別的值更新指定的列。
updateByte():用位元組值更新指定的列。
updateBytes():用位元組陣列值更新指定的列。
updateCharacterStream():用字元流的值更新指定的列。
updateDate():用date值更新指定的列。
updateDouble():用double型別的值更新指定的列。
updateFloat():用float型別的值更新指定的列。
updateInt():用int型別的值更新指定的列。
updateLong():用long型別的值更新指定的列。
updateNull():給可為null的列null值。
updateObject():用object值更新指定的列。
updateRow():用resultset物件的新內容更新。
updateShort():用short型別的值更新指定的列。
updateString():用字串型別的值更新指定的列。
updateTime():用time值更新指定的列。
可更新結果集的程式和可滾動的結果集程式很相似,但是可更新的結果集遠沒有可滾動結果集重要,這裡就不給出可更新結果集的程式碼了。