問題起因:
今天學習做一個文章列表翻頁的程式,需要獲得資料集中的資料總行數
我用的方法如下:
--------------------------------------------------
int RowCount = 0;
rs.last();
RowCount= rs.getRow(); //移動到最後,檢索當前行編號,擷取總行數 。
out.print("總行數:" + RowCount + "<br/>");
//out.print("isLast:" + rs.isLast() + "<br/>");
//out.print("isAfterLast:" + rs.isAfterLast() + "<br/>");
rs.beforeFirst(); //便於後面輸出資料
---------------------------------------------------
執行到rs.last()時候就提示不支援這個方法!
[Microsoft][SQLServer 2000 Driver for JDBC]Unsupported method: ResultSet.last
資料分析:
=============================遊標唯讀向前================================
java.sql
介面:Connection
方法:createStatement
Statement createStatement()
throws SQLException
建立一個 Statement 對象來將 SQL 陳述式發送到資料庫。
沒有參數的 SQL 陳述式通常使用 Statement 對象執行。
如果多次執行相同的 SQL 陳述式,使用 PreparedStatement 對象可能更有效。
使用返回的 Statement 對象建立的結果集在預設情況下類型為 TYPE_FORWARD_ONLY,
並帶有 CONCUR_READ_ONLY 並發層級。[---注意這裡,預設是唯讀向前的遊標]
返回:
一個新的預設 Statement 對象
拋出:
SQLException - 如果發生資料庫訪問錯誤
===========================遊標自訂======================================
java.sql
介面:Connection
方法:createStatement
Statement createStatement(int resultSetType,
int resultSetConcurrency)
throws SQLException建立一個 Statement 對象,該對象將產生具有
給定類型和並發性的 ResultSet 對象。此方法與上述 createStatement 方法相同,但它允許重寫
預設結果集類型和並發性。
參數:
resultSetType - 結果集類型,它是
---ResultSet.TYPE_FORWARD_ONLY、 //遊標向前
---ResultSet.TYPE_SCROLL_INSENSITIVE 或 //該常量指示可滾動但通常不受其他的更改影響的rs類型
---ResultSet.TYPE_SCROLL_SENSITIVE 之一//常量指示可滾動並且通常受其他的更改影響的rs類型。
resultSetConcurrency - 並發類型;它是
---ResultSet.CONCUR_READ_ONLY 或 //唯讀
---ResultSet.CONCUR_UPDATABLE 之一 //可以修改
返回:
一個新的 Statement 對象,該對象將產生具有給定類型和並發性的 ResultSet 對象
拋出:
SQLException - 如果發生資料庫訪問錯誤,或者給定參數不是指示類型和並發性的 ResultSet 常量
從以下版本開始:
1.2
解決辦法:
在建立Statement對象時,指定遊標參數
conn = DriverManager.getConnection(getConnectionUrl(),dbUserName,dbPassword);
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);