java分页查询海量数据_Java中的大量数据查询
解决方案一:直接使用ResultSet来处理
从ResultSet中将查询结果读入collection,缓存在HttpSession或有状态bean中,翻页的时候从缓存中取出一页数据显示。这种方法有两个主要的缺点:一是用户可能看到的是过期数据;二是如果数据量非常大时第一次查询遍历结果集会耗费很长时间,并且缓存的数据也会占用大量内存,效率明显下降。
对上述方法的一种改进是当用户第一请求数据查询时,就执行SQL语句查询,获得的ResultSet对象及其要使用的连接对象都保存到其对应的会话对象中。以后的分页查询都通过第一次执行SQL获得的ResultSet对象定位取得指定页的记录(使用rs.last();rs.getRow()获得总计录条数,使用rs.absolute()定位到本页起始记录)。最后在用户不再进行分页查询时或会话关闭时,释放数据库连接和ResultSet对象等数据库访问资源。每次翻页都只从ResultSet中取出一页数据。这种方式在某些数据库(如Oracle)的JDBC实现中差不多也是回缓存所有记录而占用大量内存,同时速度也非常慢。
在用例分页查询的整个会话期间,一个用户的分页查询就要占用一个数据库连接对象和结果集的游标,这种方式对数据库的访问资源占用比较大,并且其利用率不是很高。
优点:减少了数据库连接对象的多次分配获取,减少了对数据库的SQL查询执行。
缺点:占用数据库访问资源-数据库连接对象,并占用了数据库上的资源-游标;会消耗大量内存;
解决方案二:定位行集SQL查询
使用数据库产品提供的对查询的结果集可定位行范围的SQL接口技术。在用户的分页面查询请求中,每次可取得查询请求的行范围的参数,然后使用这些参数生产取得指定行范围的的SQL查询语句,然后每次请求获得一个数据库连接对象并执行SQL查询,把查询的结果返回给用户,最后释放说有的数据库访问资源。
这种方式需要每次请求时都要执行数据库的SQL查询语句;对数据库的访问资源是使用完就立即释放,不白白占用数据库访问资源。 对特定(提供了对查询结果集可定位功能的)的数据库产品,如:Oracle(rowid或rownum ),DB2(rowid或rownum ()), PostgreSQL(LIMIT 和 OFFSET),mySQL(Limit)等。(MS SQL Server 没有提供此技术。)
下面是在oracle下的查询语句示例:
SELECT * FROM ( SELECT row_.*, rownum rownum_ FROM (...... ) row_ WHERE rownum <= {pageNumber*rowsPerPage}) WHERE rownum_ > {(pageNumber-1)*rowsPerPage}
优点:对数据库的访问资源(数据库连接对象,数据库游标等)没有浪费,这些资源的充分重复的利用。
缺点:对每次分页面查询请求要频繁的从Web容器中获得数据库访问资源(数据库连接对象和数据库游标)并建立连接;要依赖于具体的数据库产品的支持。
java分页查询海量数据_Java中的大量数据查询相关推荐
- java数据查询_Java中的大量数据查询
问题描述:在通常的三层构架下,客户通过Browser请求Web服务器查询数据库,而查询结果是上千条甚至是上百万条记录,要求查询 问题描述:在通常的三层构架下,客户通过Browser请求Web服务器查询 ...
- java 游标 查数据_Java中的大量数据查询
问题描述:在通常的三层构架下,客户通过Browser请求Web服务器查询数据库,而查询结果是上千条甚至是上百万条记录,要求查询结果传送到客户端浏览器并分页显示. 考虑因素: 1. Web服务器的资源消 ...
- mongodb java 查询 日期_Java中的日期MongoDB查询
我正在尝试向 mongodb查询"date"在两个日期之间的文档. 示例数据是: { "_id" : ObjectId("4fad0af6709fbc ...
- java 生成pdf文件_Java 中HTTP响应数据生成PDF,PDF文件的读取
将HTTP响应数据生成PDF,这一步的话,就比较坑,浪费了好多时间,查了很多资料,也是我想把它记录下来的主要原因, 废话少说,先说踩的坑 1.区分字符流.字节流 这里可以百度一下,但是简言之就是: j ...
- java 导出订单明细_java中的excel数据的导入和导出
/*** 导出供应商的数据*/@Overridepublic voidexport(OutputStream os, Supplier t1) {//查出符合条件的所供应/客户的列表 List sup ...
- java分页插件PageHelper的内置list数据操作失败
问题描述: java分页插件PageHelper的内置list数据在hanlder处理器中获取失败,但是测试确通过了,如下图 但是测试代码成功 @ContextConfiguration(locati ...
- 审计MySQL 8.0中的分类数据查询
面临的挑战 通常,涉及到敏感信息时用户需要使用审计日志.不仅仅是在表上运行Select,还包括访问表中的特定单元格.通常,这类数据将包含一个分类级别作为行的一部分,定义如何处理.审计等策略. 诸如此类 ...
- PHP中mysql查询全部过程_PHP到MySQL数据查询过程概述_MySQL
摘要 本文概述了从PHP层发起mysql查询请求到mysql server 返回结果集的工作流程,并简单描述了各层可能涉及到的动作和组件.从全局把握整个交互过程. PHP层到MySQL层 Php到sq ...
- /*1. 查询SC表中的全部数据。*/ SELECT * FROM SC /*2. 查询计算机系学生的姓名和年龄。*/ SELECT Sname,Sex FROM Student WHERE Sd
1. 查询SC表中的全部数据. SELECT * FROM SC 2. 查询计算机系学生的姓名和年龄. SELECT Sname,Sex FROM Student WHERE Sdept='计算机 ...
最新文章
- Only fullscreen opaque activities can request orientation
- php redis search,php redis类
- mastered skills
- iis mysql php 附件上传大小_修改上传附件2M大小限制的方法/php+iis上传附件默认大小修改方法...
- windows下安装及配置 golang 的Web框架Beego环境
- ORACLE LINUX 6.3 + ORACLE 11.2.0.3 RAC + VBOX安装文档
- 用命令关闭计算机,使用DOS命令关机的操作步骤
- SQL server常见问题
- WannaCry勒索病毒分析
- 本地项目上传至git码云步骤(超详细,附图文)
- 春晚红包花落拼多多 巨头们为何前赴后继抢春晚?
- 一款红队大量资产指纹探测工具
- canvas 之 炫彩小球
- 从pdf复制文字到word中的问题
- 基于任务点的加速仿真
- 无法建立与远程计算机连接,解决“不能建立到远程计算机的连接,因此用于此...”的方法_常见问题解析...
- 古老的MFC,你还会用吗?
- 网站搭建之Apache安装教程
- 【毕业设计】基于单片机的录音器设计与实现 - 物联网 嵌入式 stm32
- java分页插件valuelist
热门文章
- 下面不属于python保留字_下面不属于 Python 保留字的是【 】。_学小易找答案
- 【C】C语言三种方法判别指定字符串是否被另一字符串包含
- Linux命令详解(14)useradd命令
- DFS剪枝优化 小猫爬山 数独
- 【转载】运维角度浅谈MySQL数据库优化
- linux 12541无监听程序,ORA-12541:TNS:无监听程序问题 解决办法
- python语言读后感_Python自然语言处理读后感锦集
- php死循环代码怎么写,详解PHP死循环写法和作用
- 一篇文章学会 python turtle海龟绘图
- 案例:模拟实现选民投票过程:一群选民进行投票,每个选民只允许投一次票,并且当投票总数达到100时,就停止投票