1. 程式人生 > >可滾動、可更新的結果集(轉)

可滾動、可更新的結果集(轉)

14.6  批處理

批處理也是一個為了減輕開發員負擔的設計,它不再需要開發員一次次進行類似的工作。它讓所有相類似的工作一起幹完,逐個處理的工作由後臺來完成。

14.6.1  批處理規範

JDBC升級到2.0後增強了Statement介面,使它能夠以批處理方式執行更新操作。批處理操作指的是一次可以提交多句更新語句,這些更新語句一起執行。批處理相對逐句提交,使效能大幅度提高。它的具體方法步驟如下:

con.setAutoCommit(false);
Statement st = con.createStatement( );
st.addBatch(insert int ……);
st.addBatch(insert int ……);
st.addBatch(insert int ……);
st.executeBach( );
con.commit( );
con.setAutoCommit(true);

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包
import java.sql.*;
public class JdbcText1
{
public static void main(String args[])
{
try
{
//載入驅動程式
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//開啟資料庫連線,aaa為資料來源名稱
Connection con =DriverManager.getConnection("jdbc:odbc:aaa","","");
//提交查詢
Statement st=con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
//取得查詢結果
ResultSet rs=st.executeQuery("select * from emp");
//檢視結果
rs.absolute(2);
System.out.println(rs.getString(1));
rs.previous();
System.out.println(rs.getString(1));
rs.first();
System.out.println(rs.getString(1));
rs.relative(3);
System.out.println(rs.getString(1));
System.out.println(rs.getRow());
//關閉ResultSet物件
rs.close();
//關閉Statement物件
st.close();
//關閉Connection物件
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}

在本程式中,用到了一些方法,讀者也可以把其他的方法都用一下。

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值更新指定的列。

可更新結果集的程式和可滾動的結果集程式很相似,但是可更新的結果集遠沒有可滾動結果集重要,這裡就不給出可更新結果集的程式碼了。