在不想再次通過查詢數據庫得到記錄條數的情況下,(如:select count(*) from tableName)我們可能會使用ResultSet.last()方法將遊標指向結果集末尾,並使用ResultSet.getRow()方法獲取當前行號來取得最大行號。
但我們可能遇到這樣的問題:
java.sql.SQLException:
[Microsoft][SQLServer 2000 Driver for JDBC]Unsupported method: ResultSet.last
說JDBC不支持這種方法,這是因爲Statement對象是專門處理ResultSet記錄的API對象,所以它對於所要處理的ResultSet還是有要求的,如果要使用擴展式的遊標,那麼就要使用以下構造:
Statement = Connection.createStatement(int resultSetType,int resultSetConcurrency)
resultSetType(結果集類型)包括:
該常量指示光標只能向前移動的 ResultSet 對象的類型。
ResultSet.TYPE_FORWARD_ONLY
該常量指示可滾動但通常不受 ResultSet 底層數據更改影響的 ResultSet 對象的類型。
ResultSet.TYPE_SCROLL_INSENSITIVE
該常量指示可滾動並且通常受 ResultSet 底層數據更改影響的ResultSet 對象的類型。
ResultSet.TYPE_SCROLL_SENSITIVEresultSetConcurrency(併發類型)包括:
該常量指示不可以更新的 ResultSet 對象的併發模式。
ResultSet.CONCUR_READ_ONLY
該常量指示可以更新的 ResultSet 對象的併發模式。
ResultSet.CONCUR_UPDATABLE瞭解了以上的構造之後,我們便對Statement進行修改如下:
Connection conn = DBConn.getConnection();
Statement stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
String sql = "select * from table1";// 查詢表table1中的內容
ResultSet rs = stmt.executeQuery(sql);// 執行sql語句
rs.last();// 定位光標到最後一條記錄
System.out.println(rs.getRow());// 打印當前,即最後一條記錄的行號
這樣一來問題就解決了。