Java开发基础-JDBC-对其技术的支持—01

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



猜你喜欢

转载自blog.csdn.net/coder_boy_/article/details/80645119