Oracle实现分页
2013-09-10 21:14
211 查看
1.依赖Oracle数据库sql语句实现分页
SQL代码:SELECT first_name,salary FROM (SELECT rownum rn,first_name,salary FROM (SELECT first_name,salary FROM employees ORDER BY first_name) WHERE rownum<?) WHERE rn>=?
说明:以下①②参见(SQL执行顺序/article/9994944.html)
①为保证查询出的结果是排序后的,所以在最里层查询必须使用ORDER BY子句,使用了三层查询结构。
因为如果第二层查询的WHERE子句与ORDER BY子句同时出现,会先执行WHERE子句,再执行ORDER BY子句,这样结果就不是先排序后的查询结果了。若不要求排序,完全可以使用两层查询。
②第二层查询的WHERE子句中不能使用rn别名代替rownum。
因为SQL语句执行顺序是先执行FROM子句,再执行WHERE子句,最后执行SELECT各项。所以只有FROM子句中已经查询出来的(或存在的数据)WHERE子句才可以使用。
③第一个“?”代表结束行数据(不包含);第二个“?”代表开始行数据(包含)
④根据SQL语句相关计算公式:
int page ; //当前页码
int pageSize; //每页显示数据条数
int startRow = (page-1)*pageSize +1; //开始行
int endRow = page*pageSize+1; //结束行
2.依赖结果集,进行分页
相对1该方法缺点:数据一次性取出,性能耗损大;数据更新后,结果集不能及时更新。java代码:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class PageByResult { private static final String DRIVER = "oracle.jdbc.OracleDriver"; private static final String url = "jdbc:oracle:thin:@localhost:1521:XE"; private static final String USERNAME = "test"; private static final String PASSWORD = "test"; public static void main(String[] args) throws Exception { Class.forName(DRIVER); Connection conn = DriverManager.getConnection(url, USERNAME, PASSWORD); String sql = "SELECT student_id,student_name FROM students ORDER BY student_id"; /* * 创建可以滚动的结果集: TYPE_SCROLL_INSENSITIVE :可滚动结果集,对记录的更改不敏感 * CONCUR_READ_ONLY:结果集合只可以读取,但不能进行更新操作 */ PreparedStatement pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs = pstmt.executeQuery(); System.out.println("停止数据库服务"); Thread.sleep(50000);//即使在此时停止数据库,结果集以下代码仍能正常运行,结果集仍能进行排序 System.out.println("开始输入页数"); java.util.Scanner sc = new java.util.Scanner(System.in); while(sc.hasNextInt()){ int pageSize = 2; int page = sc.nextInt(); //输入当前页码 int startRow = (page - 1) * pageSize + 1; //计算开始行 for (int i = 0; i < pageSize; i++) { rs.absolute(startRow);//对结果集滚动,定位到开始行记录数据,开始取出数据 String studentName = rs.getString("student_name"); String studentId = rs.getString("student_id"); System.out.println(studentId+"<->"+studentName); startRow++;//取毕该行数据记录后开始下一行数据读取 } } } }
相关文章推荐
- SQL分页排序的实现与分页数据重复问题——以Oracle rownum为例
- 分页技术原理与实现(二)——Java+Oracle代码实现
- oracle怎么实现分页
- SpringMVC+Mybatis+Oracle实现web分页
- Oracle分页实现原理
- 在Oracle中如何实现分页
- oracle:储存过程实现分页
- oracle12c JSON数据 使用SQL语句实现多表左外连接 显示无效数据 分页查询
- jsp+oracle分页实现
- oracle 分页的简单实现
- 最重要的也是最实用的(oracle运用存储过程嵌套游标来实现分页)
- 一个关于Oracle分页的实现方案
- 11级_Java_曹建波 04.07 jQuery easyUI +struts2+hibernate+oracle 实现 admin用户的分页操作
- Oracle利用数据伪列实现分页功能
- oracle实现分页与mysql实现分页功能
- 在Oracle中实现搜索分页查询
- Oracle:Oracle分页储存过程的实现
- aspnetpager+repeater+oracle实现分页功能
- ASP.NET调用ORACLE实现快速分页