乐趣区

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);
    }
}

运行结果


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

SEE ALSO

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

退出移动版