论坛首页 入门技术论坛

JdbcTemplate中的queryForList()内存溢出

浏览 12003 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-15  
我在对JdbcTemplate中的queryForList(String sql)作单元测试时发现有内存溢出的现象,这个查询的方法跟表中的字段多少有关:
我的做法如下:
1、表A INSERT INTO A('1','中华') 一共50万条
2、表B INSERT INTO A('1','中华人民共和国') 一共50万条
3、表C INSERT INTO A('1','中华人民共和国中华人民共和国') 一共50万条

对三张表作全查询时,发现内存溢出现象,都是用JdbcTemplate.queryForList(sql)出现的,并且其获取的最大记录数都不一样,如果这样的话,我们应该怎么解决这种问题呢?

首先:1、跟表的设计有关吗?
      2、跟表中的字段长度有关吗?
      3、跟选择的列数有关吗?


[oracle]
select * from ( select a.*, rownum rn from (select * from tableName) a )   where rn between 10 and 40
select * from (select rownum as rn1,code,name from cpcode where rownum<=100) where rn1 >=91

mssql
select * from (select top 10 * from (select top 100 * from cpcode order by code) a order by code desc) as b  order by code

[mysql]select * from cpcode limit 90,10  
   发表时间:2007-05-15  
分页取       
0 请登录后投票
   发表时间:2007-05-16  
什么库?版本?驱动版本?
0 请登录后投票
   发表时间:2007-05-16  
JdbcTemplate.queryForList(String sql)方法就是将满足条件的记录封装在数据容器中,而每一条记录又是一Map的形式置放于数据容器中,要想获取分页,就只能重写spring包中的方法了,况且还是否清楚在Spring包中的rs是否支持游标的移动呢?
再获取大量数据时,请问还有什么好的解决办法吗(除了自己新写类来处理这个问题)


用的是spring2.0版本
数据库:MS SQL
驱动:JSQLConnect.jar
0 请登录后投票
   发表时间:2007-05-16  
select   *   from   table   limit   start,pageNum  

用sql语句实现不就行了么
0 请登录后投票
   发表时间:2007-05-16  
请问:ddandyy
你的意思是使用语句实现要提取的记录,如提取21-40条记录,我该怎么写sql语句呢?
SELECT * FROM 表名
在SQL语句中只有top和percent
0 请登录后投票
   发表时间:2007-05-16  
请问:ddandyy
你这个的SQL语句能执行吗?
select * from table limit start,pageNum

能否写一个能执行的模板SQL语句。谢谢
0 请登录后投票
   发表时间:2007-05-16  
mysql在sql语句中取固定长度  网上一搜就能搜到了
比如我上面给出的那句 start 是开始的no 从头开始就是0 pageNum是取的数据量

你说从21-40 就是 select * from table limit 20,20

我这没mysql数据库  不能试  你可以去网上查

总之是肯定能做到就是了
0 请登录后投票
   发表时间:2007-05-16  
谢谢ddandyy!
你写的sql语句是满足mysql的数据库的语法,但对MS SQL和其它数据库就不能使用,我已经在MS SQL上试过了不行。
看来还是要自己写方法去包装,才能正常使用啊。
0 请登录后投票
   发表时间:2007-05-16  
ms sql?

不好意思看错了   还以为你用的mysql

光用sql也是可以的
就是要麻烦一些
你去网上找吧   很多
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics