關於ResultSet.last()方法報錯問題的解決

文章轉載:http://blog.sina.com.cn/s/blog_62a6001a0100ew6j.html


  在不想再次通過查詢數據庫得到記錄條數的情況下,(如: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_SENSITIVE

  resultSetConcurrency(併發類型)包括:
  該常量指示不可以更新的 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());// 打印當前,即最後一條記錄的行號

  這樣一來問題就解決了。

發佈了26 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章