JDBC对分页的支持
假分页(内存分页)
- 第一次查询时查出所有的数据,将其存入List中,并从List中取出第一页数据;
- 以后再查询时不访问数据库,而是直接从List中取出第n页数据;
- 首次查询慢,后续查询快;十分消耗内存;
- 适合数据量非常小的小项目;
真分页(物理分页)
- 每次查询都是通过SQL查询出满足条件的当前这一页的数据;
- 每次查询的速度一样,节约内存;
- 适合任何项目;
oracle分页的SQL
select * from (
select e.*,rownum r from (
select * from emps order by empno
)
) where r between 11 and 20
mysql分页的SQL
select * from emps
order by empno
limit 11,10
下面通过简单实例演示JDBC中对oracle数据库的真分页处理
public class TestDay03 { /** * oracle数据库的真分页 */ @Test public void test5(){ //假设需求要求每页显示10条数据 int size = 10; //假设用户当前点击了第二页 int page = 2; Connection conn = null; try { conn = DBUtil.getConnection(); String sql = "select * from (" +" select e.*,rownum r from ( " +"select * from emp_cheri " +" order by empno " +") e" +" ) where r between ? and ?"; PreparedStatement ps = conn.prepareStatement(sql); //起始行 ps.setInt(1, (page-1)*size+1); //终止行 ps.setInt(2, page*size); ResultSet rs = ps.executeQuery(); while(rs.next()){ System.out.println(rs.getInt("empno")+","+rs.getString("ename")); } } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("分页查询员工失败!",e); }finally{ DBUtil.close(conn); } } }
运行程序后控制台成功输出指定第二页的10条记录
对应数据库中的11-20行数据记录