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

    这是我看李刚编著的《疯狂Java讲义》后总结出来的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值