JDBC分页查询的简单实现

JDBC 分页查询源码

   /**
     * 分页查询
     *
     * @param sql 分页查询语句
     * @param page 页数(最小为1)
     * @param pageSize 分页大小
     */
    public void pageQuery(String sql,int pageSize, int page) {
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        RowSetFactory factory = null;
        try {
            // 获取数据库的连接
            conn = JdbcUtils.getConnection();
            // 设置RS游标移动类型
            st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
            rs = st.executeQuery(sql);
            // 结果集元数据信息对象
            ResultSetMetaData metaData = rs.getMetaData();
            // 创建可以产生CachedRowSet的工厂
            factory = RowSetProvider.newFactory();
            CachedRowSet cachedRs = factory.createCachedRowSet();
            // 最关联的两句
            // 设置每页的大小
            cachedRs.setPageSize(pageSize);
            // 第一个参数:将Rs中query到的结果集输入到cachedRs中
            // 第二个参数:从第(page - 1) * pageSize + 1行开始抓取结果集,一次抓取一页
            cachedRs.populate(rs,(page - 1) * pageSize + 1);

            // 打印列名
            for (int i = 0; i < metaData.getColumnCount(); i++) {
                System.out.print(metaData.getColumnName(i + 1) + "\t");
            }
            System.out.println();
            // 对分页的结果集进行处理
            while (cachedRs.next()) {
                for (int i = 0; i < metaData.getColumnCount(); i++) {
                    System.out.print(cachedRs.getString(i + 1) + "\t");
                }
                System.out.println();
            }

            rs.close();
            st.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 释放与JDBC有关的资源
            JdbcUtils.release(conn,st,null,rs);
        }
    }

测试类

package deptmgr.test;

import deptmgr.dao.BaseDao;

/**
 * @author mmengyiyu
 * @date 2019/11/15 21:00
 */
public class BaseDaoTest {
    public static void main(String[] args) {
        BaseDao baseDao = new BaseDao();
        baseDao.pageQuery("select * from EMP",5,2);
    }
}

运行结果

image-20191115210553113.png
该运行结果的Table来自于Oracle的EMP表,整张表请参考用简单的例子解释Oracle分页查询 - - SegmentFault 思否

SEE ALSO

JDBC编程 - 获取Connection及常见问题 - - SegmentFault 思否

阅读 95发布于 11月15日
推荐阅读
目录