分頁顯示從資料庫中讀出的記錄
來源:互聯網
上載者: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類的定義,從左往右、從前往後的瀏覽資料結果。無法動態顯示指定任意前後的結果集資料。