• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 分頁顯示從數據庫中讀出的記錄

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    分頁顯示從 數據庫 中讀出的記錄 現象: 在用JDBC訪問某個數據庫,并讀出一個ResultSet數據記錄集時,如果記錄數太大,則會占用客戶端(運行 java 程序的機器)的大量內存(如果客戶端是某個大企業的營業部門的代理點分機,則有可能java程序會占用完全部內存
    分頁顯示從數據庫中讀出的記錄

    現象:

    在用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.打開一個數據庫連接

    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類的定義,從左往右、從前往后的瀏覽數據結果。無法動態顯示指定任意前后的結果集數據。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>