/** * 分页查询 * * @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); } }
测试类java
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); } }
运行结果sql
该运行结果的Table来自于Oracle的EMP表,整张表请参考用简单的例子解释Oracle分页查询 - - SegmentFault 思否数据库
SEE ALSO编程
JDBC编程 - 获取Connection及常见问题 - - SegmentFault 思否segmentfault