java 百万数据查询_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中的大量数据查询相关推荐
- clob在java里的类型_Java对Oracle中Clob类型数据的读取和写入(转)
Java对Oracle中Clob数据类型是不能够直接插入的,但是可以通过流的形式对clob类型数据写入或者读取,网上代码并不算特别多,讲的也不是很清楚,我对网上资料进行了整理和总结,具体看代码: 写入 ...
- java全角数字_JAVA技巧(JAVA全角和半角的转换代码)
实现代码如下: public class change { public static void main(String[] args) { String QJstr="全角转半角DAO&q ...
- Pandas中xs()函数索引复合索引数据的不同切面数据(索引复合索引中需要的数据):索引列复合索引中的一个切面、索引行复合索引中的一个切面
Pandas中xs()函数索引复合索引数据的不同切面数据(索引复合索引中需要的数据):索引列复合索引中的一个切面.索引行复合索引中的一个切面 目录
- laytpl遍历实体列表_Layui数据表格之获取表格中所有的数据方法
数据表格中的数据是通过直接赋值的方式.这里实际上思想是反过来的,将拿数据表格中的所有数据,转换为layui数据表格拿原始数据去渲染数据表格. 1.创建一个作用域合适的js对象数组用来保存数据表格中的原 ...
- 什么是数据标准化?在Python中如何进行数据标准化?「必学」
转载:https://www.toutiao.com/i6644145067256709645/?tt_from=weixin&utm_campaign=client_share&wx ...
- 获取layui表格单元格的数据_Layui数据表格之获取表格中所有的数据方法
数据表格中的数据是通过直接赋值的方式.这里实际上思想是反过来的,将拿数据表格中的所有数据,转换为Layui数据表格拿原始数据去渲染数据表格. 1.创建一个作用域合适的JS对象数组用来保存数据表格中的原 ...
- java 找出list中相同数据_Java获取List中相同的数据
我现在连废话都懒得说了,直接讲代码吧! int index = 0; for (int i = 0,len = list.size(); i < len; i++) { if(list.size ...
- java删除jtable一行的值_JTable中删除一行数据
Jtable中删除一行数据: import java.awt.BorderLayout; import java.awt.Component; import java.awt.Container; i ...
- java怎么加定时器_JAVA WEB程序中添加定时器
JAVA WEB程序中添加定时器 //这是我的定时器类,用来定时执行某段任务: package com.my.time; import java.text.ParseException; import ...
- 取java.sql.date日期_JAVA 处理时间 - java.sql.Date、java.util.Date与数据库中的Date字段的转换方法[转]...
1.如何将java.util.Date转化为java.sql.Date? 转化: java.sql.Date sd; java.util.Date ud; //initialize the ud su ...
最新文章
- 为反对种族歧视,GitHub正在把master/slave等术语替换掉
- XP下如何恢复Administrator
- 这些密码千万不要用!黑客5分钟即可破解!
- 边缘计算、雾计算、云计算区别几何?
- 2019春第六周编程总结
- CSDN×易观算法大赛火热进行中~
- NUC1196 Sum【水题+数学题】
- Python print()重定向 不输出到屏幕
- Cannot detect Web Project version. Please specify version of Web Project through Maven project ...报错
- Matlab 获取主板、硬盘、CPU、BIOS和网卡序列号
- ”被裁员6次的运营总监分享”总被裁员的运营人到底是为什么?
- 计算机丢失drivers文件,system32\drivers.Sys文件丢失怎么解决?
- 微信公共号开发教程java版——基础知识和环境搭建(一)
- 如何显示 word 左侧目录大纲
- 软件开发工具的使用与开发
- Intel Distiller工具包-量化实现1
- TLS 协议-对称加密原理
- java数组中包含元素_Java中声明数组时,包括数组的名字、数组中包含的元素的 。 (5.0分)_学小易找答案...
- win7老计算机,解决旧电脑运行win7慢的小技巧
- 众安在线:提出保险通证化,力推10余个区块链应用产品 |追击上市公司