`
hotmanhh
  • 浏览: 14953 次
社区版块
存档分类
最新评论

基于Oracle数据库的数据分页原理

阅读更多
一直感觉分页是个需求但却又是个难点,不得不花点时间去琢磨琢磨,还琢磨出了一点明堂,现将思想与大家分享。
分页原理:
分页显示,是将数据库中的结果集人为的分成一段一段的来显示即可。

实现方式:
那么这里有很多的实现方式,有的数据库本身就支持让你只查询部分的数据,那么这个就可以用来分页了。比如MySQL。
有点数据库不支持这么作,但是提供可以使用上下遍历的操作,那么这个也是可以的。比如Oracle,好像Oracle还支持一种查询,从某段开始取出多少数据(还没有研究,唉)。
还有的就是使用Java的container来处理,一次性将所有的数据存入container中,然后在container中进行分段处理,不过这种做法对于大量的数据来说比较消耗内存,所以数量较少可以使用,多了,可以选择使用第三方的软件来处理,比如hibernate就对分页查询支持的很好(正准备研究ing,呵呵)。

知道上面的概念后,我选择了第二种,毕竟我不用MySQL,用的是Oracle啊。

那么这里就有个问题,最关键的地方在于究竟有多少数据行,即结果集中有多少个row。在Oracle的JDBC中提供一个做法返回结果集中的row数量。
假设ResultSet rs结果集对象已经含有结果了。
那么rs.last()将rs中的游标移动到最后的数据行上,再通过rs.getRow()则可以得到该行的行数,这个也就是我们一个结果集中的总数量。
我们根据这个总数量(假定为int rowCount变量)来计算分页的信息。
通常会有第一页(假定为int firstPage),上一页(假定为int prePage),下一页(假定为int nextPage),最后页(假定为int lastPage)。当然也有的直接将每一页显示出来,这也是一种处理方式。要想算出上述变量,还需要一个很有用的变量,那就是每页究竟需要显示多少数据行。当然,每页显示的数据行越多,页数就越少了(怎么感觉象废话啊,^_^)。因此我们还需要一个变量表示每页显示的数据行(假定int rowPerPage)。
那么
总页数totalPage=(rowCount + rowPerPage -1)/rowPerPage
第一页firstPage  = 1
最后页lastPage   = totalPage
此处如何计算上一页和下一页呢,我是增加了一个叫做当前页的变量来处理(假定为int curPage)
那么上一页和下一页则是根据当前页计算出来的
上一页prePage = (curPage == 1 ? 1:curPage - 1)
下一页nextPage = (curPage == lastPage? lastPage:curPage + 1 )
上述的写法是因为有可能当前页在第一页上或者最后页上,所以当当前页在第一页上时,那么上一页就永远时第一页;同理,如果当前页在最后页上时,就永远在最后页上。
那么,现在当前页curPage如何确定呢,这个就自己处理吧。

现在我们有了上述的变量,便可以实现分页处理了。

在Oracle的JDBC中,rs有个很重要的方法为absolute(int local),意思是通过数量行来定位。比如rs.absolute(3)表示定位到第三条数据行上。

这样我们就可以利用上述的分页来显示每页的数据行吧。

我是采用一个for循环来处理的,for循环的条件根据当前页来计算当前页所包括的数据行返回。

最后别忘记了关闭资源哦。呵呵,代码没有办法全部贴出来,如果有人想要,我这里有src,可以给我发mail。
分享到:
评论
2 楼 guhailin 2011-02-09  
我也以为是在数据库里分的
1 楼 liuyuantp 2010-12-14  
写的有点歧义,我还以为是在数据库中直接分页了呢。

相关推荐

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    其三、职业方向多:Oracle数据库管理方向、Oracle开发及系统架构方向、Oracle数据建模数据仓库等方向。 四、 如何学习 认真听课、多思考问题、多动手操作、有问题一定要问、多参与讨论、多帮组同学 五、 体系结构 ...

    magic-api:magic-api是一个接口快速开发框架,通过Web页编写脚本以及配置,自动映射为HTTP接口,无需定义控制器,服务,Dao,Mapper,XML,VO等Java对象

    支持MySQL,MariaDB,Oracle,DB2,PostgreSQL,SQLServer等多支持jdbc规范的数据库 支持非关系型数据库Redis,Mongodb 支持分页查询以及自定义分页查询 支持多数据源配置,支持运行时动态添加数据源 支持SQL缓存,...

    教学、学习必备:jsp教案

    第0章 JSP程序设计课程介绍 4 第1章 JSP简介 5 1.1 软件编程体系 5 1.1.1软件编程体系简介 5 1.1.2企业应用开发架构 5 1.1.3 Java应用开发体系 6 ...7.8.1连接Oracle数据库 218 7.8.2连接MySql数据库 220

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    我们掌握了数据库及其应用技术、数据库原理、计算机网络技术等课程,对数据库的设计、应用、维护及局域网的组成有了深刻的认识与一定的动手实践能力,考取了信息处理、程序设计、数据库技术等国家IT认证。...

    PHP网络编程技术与实践 源码

    4.3 Oracle数据库相关知识 4.4 本章小结 第5章 文件处理与数据存储 5.1 文件系统处理 5.1.1 打开文件 5.1.2 关闭文件 5.1.3 显示文件内容 5.1.4 从文件中读取内容 5.1.5 把数据写入文件 5.1.6 遍历文件 5.1.7 复制、...

    asp.net知识库

    Oracle数据库字典介绍 0RACLE的字段类型 事务 CMT DEMO(容器管理事务演示) 事务隔离性的一些基础知识 在组件之间实现事务和异步提交事务(NET2.0) 其它 在.NET访问MySql数据库时的几点经验! 自动代码生成器 关于能...

    JAVA上百实例源码以及开源项目源代码

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    Jive资料集

    <br> 安全认证 1 Jive2.1.1 License保护原理分析 2 用Java的加密机制来保护你的数据 3 在java中编程实现数字签名系统 4 关于Jive1中的验证和相关类的调用 <br> 5 MD5的加密算法...

    jive.chm

    2 关于Jive2中的中文搜索 3 基于JAVA的全文索引引擎Lucene简介 <br> 安全认证 1 Jive2.1.1 License保护原理分析 2 用Java的加密机制来保护你的数据 3 在java中编程实现数字签名系统...

    JAVA上百实例源码以及开源项目

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    亮剑.NET深入体验与实战精要2

    因pdf的容量过大分4个压缩包打包,还有一个源码...15.5.11 分页的数据访问 570 15.5.12 SQL命令的优化 570 15.5.13 tempdb的使用技巧 572 15.5.14 使用视图代替跨库操作 572 15.5.15 尽量避免大事务操作 572 15.5.16...

    亮剑.NET深入体验与实战精要3

    因pdf的容量过大分4个压缩包打包,还有一个源码...15.5.11 分页的数据访问 570 15.5.12 SQL命令的优化 570 15.5.13 tempdb的使用技巧 572 15.5.14 使用视图代替跨库操作 572 15.5.15 尽量避免大事务操作 572 15.5.16...

    java面试题

    39. 解释$ORACLE_HOME 和$ORACLE_BASE的区别? 19 40. session与cookie的区别和联系? 19 41. Statement和PrepareStatement的区别 19 42. JSP的内置对象及方法。 19 43. JSP的常用指令 20 44. 四种会话跟踪技术 20 45...

    JAVA面试题最全集

    5.Java中的分页、效率考虑。 6.简单介绍您所了解的structs。 1.xml在项目中的作用 2.s-EJB 与 e-EJB的区别 3.会话面的作用 4.cmp与bmp的优缺点 5.j2me程序的必需的几个部分 6.c/s与b/s的区别 7.构建一...

    单点登录源码

    本系统是基于RBAC授权和基于用户授权的细粒度权限控制通用平台,并提供单点登录、会话管理和日志管理。接入的系统可自由定义组织、角色、权限、资源等。用户权限=所拥有角色权限合集+用户加权限-用户减权限,优先级...

    Java面试宝典2010版

    24. 写一个用jdbc连接并访问oracle数据的程序代码 25、Class.forName的作用?为什么要用? 26、大数据量下的分页解决方法。 27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 28、这段代码有什么...

    最新Java面试宝典pdf版

    24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段...

Global site tag (gtag.js) - Google Analytics