Java 中实现 Oracle 分页查询
在 Java 中实现 Oracle 分页查询时,需结合数据库特性与代码逻辑设计。以下是常见实现方式及对比:
一、数据库层实现分页
1. 使用 ROWNUM
伪列
- 原理:通过嵌套子查询动态生成行号,控制返回范围。
- 示例 SQL:
SELECT * FROM ( SELECT a.*, ROWNUM rnum FROM ( SELECT * FROM employees ORDER BY employee_id ) a WHERE ROWNUM <= 30 ) WHERE rnum > 20
- 说明:内层排序,中间层限制最大行号,外层过滤起始行。
- 注意:
ROWNUM
从 1 开始,不能直接用于等于判断,需嵌套查询避免逻辑错误。
2. 使用 OFFSET
和 FETCH
(Oracle 12c+)
- 原理:通过
OFFSET
跳过行数,FETCH
限制返回行数,语法更简洁。 - 示例 SQL:
SELECT * FROM employees ORDER BY employee_id OFFSET 20 ROWS FETCH NEXT 10