Result 游標控制
1stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY );//注意必須有參數,否則r沒結果
rs = stmt.executeQuery( "select * from student" );
rs.last();
int r = rs.getRow();
System.out.println( "r=" + r );
2
rs = stmt.executeQuery( "select count(*) as sc from student" );
while ( rs.next() ) {
System.out.println( rs.getInt("sc") );
System.out.println( rs.getString("sc") ); //都可以
}
3
rs = stmt.executeQuery( "select * from student" );
while ( rs.next() ) {
i++;
}
System.out.println( "i=" + i );
----------------------------------------------------------------------------------------------------
conn.createStatement()參數介紹:
第一個參數指定 ResultSet 的類型。其選項有:
TYPE_FORWARD_ONLY:
ResultSet指針只能向前移動;
TYPE_SCROLL_INSENSITIVE:
ResultSet指針可以前后移動,INSENSITIVE表示不及時更新,就是如果數據庫里的數據修改過,并不ResultSet中反映出來;
TYPE_SCROLL_SENSITIVE:
ResultSet指針可以前后移動,SENSITIVE表示及時跟蹤數據庫的更新,以便更改ResultSet中的數據。
在實際開發中,我們可以利用這些參數來方便地移動指針,比如:可以得到ResultSet的記錄數
Statement stmt = con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet. CONCUR_READ_ONLY );
ResultSet rs = stmt.executeQuery("SELECT id, name FROM TABLE1");
rs.last(); //移動到最后一行
int rownum = rs.getRow(); //獲得當前行的行號,即記錄的條數
rs.absolute(1); //將指針返回至第一條記錄
接著來看看resultSetConcurrency參數的意義:
CONCUR_READ_ONLY: 表示當前ResultSet對象只讀,不能更新;
CONCUR_UPDATABLE:表示當前ResultSet可以更新。
在實際開發中我們可以利用CONCUR_UPDATABLE參數來實時更新ResultSet中的數據,更新有兩種方式:
第一種方式是更新當前數據行的數據,如:
rs.absolute(5); // 移動rs指針至第5行數據
rs.updateString("NAME", "daniel"); // 將該行name列的值更新為“daniel”
rs.updateRow(); //更新數據源的數據
第二種方式是插入一行數據,如:
rs.moveToInsertRow(); // 將指針移動至插入行,插入行是ResultSet對象中的特殊行
rs.updateString(1, 2); // 更新插入行中第一列的值為2
rs.updateInt(2, "daniel"); // 更新第二列中的值為daniel
rs.insertRow();
rs.moveToCurrentRow(); //將指針移動至插入之前的位置
[備注]
在默認情況下類型為 TYPE_FORWARD_ONLY, CONCUR_READ_ONLY 并發級別。
其實這些參數名稱都對應一個整數值:
TYPE_FORWARD_ONLY=1003
TYPE_SCROLL_INSENSITIVE=1004
TYPE_SCROLL_SENSITIVE=1005
CONCUR_READ_ONLY=1007
CONCUR_UPDATABLE=1008
關于Interface ResultSet 更多方法,請參考http://java.sun.com/j2se/1.5/docs/api/java/sql/ResultSet.html