java.sql.SQLException: 對只轉發結果集的無效操作: last


java.sql.SQLException: 對只轉發結果集的無效操作: last
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
at oracle.jdbc.driver.BaseResultSet.last(BaseResultSet.java:81)
at com.ambow.upgrade.comm.UpGradeService.deleteOpr(UpGradeService.java:568)
at com.ambow.upgrade.comm.UpGradeService.loadData(UpGradeService.java:126)
at com.ambow.upgrade.comm.UpGradeService.exeUpgrade(UpGradeService.java:519)
at com.ambow.upgrade.comm.UpGradeService.main(UpGradeService.java:528)



JAVA代碼:
pstmt = sourceConn.prepareStatement(findSql);
pstmt.executeUpdate();
rs = pstmt.executeQuery();
rs.last();//移到最后一行 出錯代碼行
int rowCount = rs.getRow(); //得到當前行號,也就是記錄數
rs.beforeFirst(); //還要用到記錄集,就把指針再移到初始化的位置

 

 

出錯原因見這里:

因為初學,所以,在建立Statement時使用默認參數。導致在使用執行rs.last()時,產生“java.sql.SQLException:對只轉發結果集的無效操作:last”的異常。   

最后在建立Statement時加入相關參數,就可以解決了。   

操作查詢結果集的過程中出現異常   

    

出現異常的語句: rs.last();   

    

異常的詳細信息:對只轉發結果集的無效操作: last   

    

解決辦法:  stat = conn.createStatement();   

         改為 stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); 就可以了   

    

分析: 異常出現於移動結果集的指針時,原因是在生成statement對象的時候提供的參數不同   

無參數的那個方法使用的是默認參數,statement執行后得到的結果集類型為 ResultSet.TYPE_FORWARD_ONLY.這種類型的結果集只能通過rs.next();方法逐條讀取,使用其他方法就會報異常. 如果想執行一些復雜的移動結果集指針的操作就要使用其他參數了   

順便簡單介紹一下各個參數:   

ResultSet.TYPE_FORWARD_ONLY   (略)   

ResultSet.TYPE_SCROLL_INSENSITIVE  雙向滾動,但不及時更新,就是如果數據庫里的數據修改過,並不在ResultSet中反應出來。   

ResultSet.TYPE_SCROLL_SENSITIVE  雙向滾動,並及時跟蹤數據庫里的更新,以便更改ResultSet中的數據。   

ResultSet.CONCUR_READ_ONLY  只讀取ResultSet   

ResultSet.CONCUR_UPDATABLE  用ResultSet更新數據庫 

 

修改后的代碼:
pstmt = sourceConn.prepareStatement(findSql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
pstmt.executeUpdate();
rs = pstmt.executeQuery();
rs.last();//移到最后一行
int rowCount = rs.getRow(); //得到當前行號,也就是記錄數
rs.beforeFirst(); //還要用到記錄集,就把指針再移到初始化的位置


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM