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行数据记录