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 思否