分頁顯示從資料庫中讀出的記錄

來源:互聯網
上載者:User
分頁|資料|資料庫|顯示   在用JDBC訪問某個資料庫,並讀出一個ResultSet資料記錄集時,如果記錄數太大,則會佔用用戶端(運行java程式的機器)的大量記憶體(如果用戶端是某個大企業的營業部門的代理點分機,則有可能java程式會佔用完全部記憶體,然後報錯),並且會造成用戶端負載過重,運行速度極度緩慢(在sybase資料庫中,我曾做過一個測試。選擇某個大資料記錄,SQL語句運行完需要4分鐘,而在java用戶端完全顯示出來,則需要將近10分鐘)。  解決方案:
  給使用者提供一個可選擇分頁顯示的選項,如果使用者不想分頁顯示則完全顯示,否則分頁顯示。

  1.定義一個分頁數全域常量,即每頁顯示的資料條數。


  private final static int SKIP = 100;


  2.定義一個確定某個分頁條數的全域變數,即該顯示頁的當前顯示資料條數。


  private static int cur = 0;


  3.定義一個ResultSet全域變數,以便多次使用


  private static java.sql.Result rs = null;


  4.開啟一個資料庫連接[/pre]


  Class.forName( sqlDriver );  java.sql.Connection conn = DriverManager.getConnection( URL, (String)userName,(String)Passwd)  Statement stmt = conn.createStatement();  String searchSql = "......";  rs = stmt.executeQuery(searchSql);




  5.擷取查詢結果集資料(一般是在查詢按鈕的響應事件函數裡)




  ......  nextButton.setEnable(true);  cur = 0;  while( cur < SKIP && rs.next() ){  cur ++ ;  .....(擷取rs中的記錄,存入java程式的變數中)  }


  6.顯示下一頁的結果集資料(一般是在下頁按鈕的響應事件函數裡)


  if( rs.getRow() == 0 )  {  nextButton.setEnable(false);  closeConnection(); --rs的cursor已經到了最後,結果集顯示完畢,關閉此次的串連  }  cur = 0;  if(rs != null && rs.getRow() > 0)  {  ....將上頁顯示的內容清除  while(cur < SKIP && rs.next() )  {  cur ++ ;  .....(擷取結果集中的記錄,存入java程式的變數中)  }  }


  缺陷:  此方法根據2.0版本的JDBC(具體和JDBC驅動程式的供應商有關)之前的ResultSet類產生,因為ResultSet無法將已經顯示的結果集復原,所以此法只能按照ResultSet類的定義,從左往右、從前往後的瀏覽資料結果。無法動態顯示指定任意前後的結果集資料。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.