關於SQL server中不支持ResultSet.last() 的問題

        在數據庫查詢中,一般我們都是先獲得查詢的結果集,然後通過ResultSet.last (/rs.last) 將遊標移到記錄集末,再用ResultSet.getRow() 函數來獲得最後一條記錄的行號,由此來獲得該記錄集的數量。

         這個方法在oracle 數據庫中運行正常,但是換到MS SQL中就會報出

java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Unsupported method: ResultSet.last

這樣的錯誤。

解決辦法是:

Statement變量要按照如下設置:

stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);   

或:

Statement stmt = conn.createStatementResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

但這樣做是將遊標移到最後一條記錄的位置比較耗時,少量的記錄不太明顯。以下是測試的記錄: 

1,用COUNT函數方法,該方法是在查詢中通過SQL的統計函數COUNT來統計查詢的記錄數。
2,用ResultSet.last()方法。
3,環境爲XP,SQL SERVER 2000,JAVA
4,記錄數:100000。
5,結果:COUNT方法用時270毫秒;ResultSet.last()方法用時31846毫秒,大約32秒。
這個結果大家是不是大吃一驚。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章