免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 8975 | 回复: 32
打印 上一主题 下一主题

jdbc大数量查询问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-11-24 12:23 |只看该作者 |倒序浏览
我用JDBC对一个表进行查询,运行环境为:JBUILDER+WEBLOGIC。返回的结果集比较大,导致虚拟机内存溢出。然后我有使用可滚动结果集的方法,execteQuery("select * from aa"方法执行过了,但调用absolute(1000000)的时候执行了很长时间,然后虚拟机内存又溢出了。

对大数据量的查询应该是一个典型的问题,不知道哪位又比较好的解决办法。先谢了。

论坛徽章:
0
2 [报告]
发表于 2004-11-24 13:41 |只看该作者

jdbc大数量查询问题

可以限定查询的数量,
数据库里面的数据很多,有1000000条。但是页面上不会显示那么多。
最多三五十条,所以你检索出你需要的条数就可以了。
select * from aa where ROWNUM<50;--only in oracle

SELECT * FROM (select rownum ROWTEMP,AA.* from AA) WHERE ROWTEMP>;110 AND ROWTEMP<120(取110到120列的内容)
其它数据库也有不同的支持。

论坛徽章:
0
3 [报告]
发表于 2004-11-24 15:17 |只看该作者

jdbc大数量查询问题

可我的目的就是要把1000000万条记录全部取出。当然取出的目的不是为了在WEB上显示了,而是用于企业级的数据检索。最早的我想法是使用游标,每次在内存中只缓存部分数据,然后通过游标的方法把全部结果取出。但是JDBC好象不支持显式的游标方法,而是通过ResultSet(内建游标)工作的。只要一取内存就溢出

论坛徽章:
0
4 [报告]
发表于 2004-11-24 15:58 |只看该作者

jdbc大数量查询问题

可以让数据库来做这些事情,写存储过程哦。
不理解的是:做检索,select不是用来做检索的么?

论坛徽章:
0
5 [报告]
发表于 2004-11-24 16:29 |只看该作者

jdbc大数量查询问题

是这样的。

先查询数据:

stmt = conn.createStatement (va.sql.ResultSet.TYPE_SCROLL_INSENSITIVE ,                      java.sql.ResultSet.CONCUR_READ_ONLY ) ;

result =stmt.executeQuery("select *  from its_czcounterdata_tbl t where t.opentime >; '20040701000000' and t.opentime < '20041030235959'";

然后使用:

while ( result.next () ) {
System.out.println ( result.getString ( "opentime" ) ) ;
。。
。。
对数据做转换
}

这个过程,估计JAVA是把所有数据从数据库中读入到内存中。所以当返回的结果集很大的时候,内存就装不下了,结果发生溢出。

因此有没有什么方法,在result.next () 的时候,内存只保留这次取的结果,而不必全部取到内存中?

论坛徽章:
0
6 [报告]
发表于 2004-11-24 16:40 |只看该作者

jdbc大数量查询问题

原帖由 "allensxxx" 发表:
while ( result.next () ) {
System.out.println ( result.getString ( "opentime" ) ) ;
。。
。。
对数据做转换
}
....

做了什么处理,对数据转换是什么概念?update语句没法实现么?

论坛徽章:
0
7 [报告]
发表于 2004-11-24 16:49 |只看该作者

jdbc大数量查询问题

必须全取出来才能检索吗?
或者加上-ms -mx属性。

论坛徽章:
0
8 [报告]
发表于 2004-11-24 16:52 |只看该作者

jdbc大数量查询问题

对数据做转换,简单的说就是将这条记录保存到一个磁盘文件里。
在做result.next () 的时候JAVA只是把新的数据加载到result中,而用过的数据不不释放,最后导致result中保存的数据过大,内存溢出。

论坛徽章:
0
9 [报告]
发表于 2004-11-24 17:09 |只看该作者

jdbc大数量查询问题

哦,原来如此。因为数据量比较大可以想办法来平衡一下。

建议:如果可能的话,最好写个过程,把相关数据传过去,然后把这件事办了。
数据库里面处理效率要高的多。
其它的想法就没必要说了(这方面我也没有经验),   

论坛徽章:
0
10 [报告]
发表于 2004-11-24 17:30 |只看该作者

jdbc大数量查询问题

存储过程我也考虑过,但是这个取数据的操作是一个很复杂的架构中的一环,所以没有那么灵活。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP