java資料庫程式設計(11) 查詢結果分頁
阿新 • • 發佈:2018-12-02
- 因為離線RowSet是將結果集讀取到記憶體中的,如果資料庫太大的話,一次性讀取到記憶體中,可能會造成記憶體溢位,所以RowSet還提供了分頁功能,即每次只裝載資料庫中的某幾行資料。
- CachedRowSet提供了以下方法來控制分頁
- populate(ResultSet rs, int StartRow)從第幾行開始裝在資料
- SetPageSize(int PageSize)每一頁的大小(即每次從資料庫中讀取多少行資料)
- 具體的講解穿插在程式碼中
import javax.sql.rowset.CachedRowSet; import javax.sql.rowset.RowSetFactory; import javax.sql.rowset.RowSetProvider; import java.io.FileInputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.Properties; public class PagesTest { private static String driver; private static String url; private static String user; private static String pass; public void initParam(String fileName) throws Exception{ Properties prop = new Properties(); prop.load(new FileInputStream(fileName)); driver = prop.getProperty("driver"); url = prop.getProperty("url"); user = prop.getProperty("user"); pass = prop.getProperty("pass"); } public CachedRowSet query(String sql, int pageSize, int page) throws Exception{ Class.forName(driver); try( Connection conn = DriverManager.getConnection(url, user, pass); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql)) { RowSetFactory factory = RowSetProvider.newFactory(); CachedRowSet cacheRs = factory.createCachedRowSet(); // 設定每頁顯示的行數,也就是說每次裝填到CachedRowSet中的行數是多多少 cacheRs.setPageSize(pageSize); // 將rs中第幾行開始裝填到CachedRowSet中 cacheRs.populate(rs, (page -1) * pageSize + 1); return cacheRs; } } public static void main(String args[]) throws Exception{ PagesTest pagesTest = new PagesTest(); pagesTest.initParam("mysql.ini"); CachedRowSet rs = pagesTest.query("select * from students", 2,1); while (rs.next()){ System.out.println(rs.getString(1) + "\t" + rs.getString(2)); } } } //執行程式,看到以下輸出 // S2 Marry // S3 Tom