1. 程式人生 > >java資料庫程式設計(11) 查詢結果分頁

java資料庫程式設計(11) 查詢結果分頁

  1. 因為離線RowSet是將結果集讀取到記憶體中的,如果資料庫太大的話,一次性讀取到記憶體中,可能會造成記憶體溢位,所以RowSet還提供了分頁功能,即每次只裝載資料庫中的某幾行資料。
  2. CachedRowSet提供了以下方法來控制分頁
    1. populate(ResultSet rs, int StartRow)從第幾行開始裝在資料
    2. SetPageSize(int PageSize)每一頁的大小(即每次從資料庫中讀取多少行資料)
  3. 具體的講解穿插在程式碼中
    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