熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

用finally關鍵字來避免資源漏洞

2022-06-13   來源: JSP教程 

  現象
  在用JDBC訪問某個數據庫並讀出一個ResultSet數據記錄集時如果記錄數太大則會占用客戶端(運行java程序的機器)的大量內存(如果客戶端是某個大企業的營業部門的代理點分機則有可能java程序會占用完全部內存然後報錯)並且會造成客戶端負載過重運行速度極度緩慢(在sybase數據庫中我曾做過一個測試選擇某個大數據記錄SQL語句運行完需要分鐘而在java客戶端完全顯示出來則需要將近分鐘)
  
  解決方案
  給用戶提供一個可選擇分頁顯示的選項如果用戶不想分頁顯示則完全顯示否則分頁顯示
  
  定義一個分頁數全局常量即每頁顯示的數據條數
  
  private final static int SKIP = ;
  
  定義一個確定某個分頁條數的全局變量即該顯示頁的當前顯示數據條數
  
  private static int cur = ;
  
  定義一個ResultSet全局變量以便多次使用
  
  private static javasqlResult rs = null;
  
  打開一個數據庫連接[/pre]
  
  ClassforName( sqlDriver );
  javasqlConnection conn = DriverManagergetConnection( URL (String)userName(String)Passwd)
  Statement stmt = conncreateStatement();
  String searchSql = ;
  rs = stmtexecuteQuery(searchSql);
  
  獲取查詢結果集數據(一般是在查詢按鈕的響應事件函數裡)
  
  
  nextButtonsetEnable(true);
  cur = ;
  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() > )
  {
  將上頁顯示的內容清除
  while(cur < SKIP && rs.next() )
  {
  cur ++ ;
  .....(獲取結果集中的記錄,存入java程序的變量中)
  }
  }
  
  缺陷:
  此方法根據2.0版本的JDBC(具體和JDBC驅動程序的提供商有關)之前的ResultSet類產生,因為ResultSet無法將已經顯示的結果集回滾,所以此法只能按照ResultSet類的定義,從左往右、從前往後的浏覽數據結果。Tw.WInGwiT.Com無法動態顯示指定任意前後的結果集數據。

From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19282.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.