jdbc内存溢出

wanghaoming100 2009-11-20 08:33:24
package com.cafe.test;

import java.sql.*;
class Test{
/**
* @param args
*/
/**
* @param args
*/
public static void main(String args[])
{
int i=0;
String RL = "jdbc:oracle:thin:@localhost:1521:orcl";
String user ="cafe";//这里替换成你自已的数据库用户名
String password = "pwd";//这里替换成你自已的数据库用户密码
String sqlStr = "select * from main_info";

try{ //这里的异常处理语句是必需的.否则不能通过编译!
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println( "类实例化成功!" );

Connection con = DriverManager.getConnection(RL,user,password);
System.out.println( "创建连接对像成功!" );

Statement st = con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
System.out.println( "创建Statement成功!" );

//st.setMaxRows(10);
ResultSet rs = st.executeQuery( sqlStr );
System.out.println( "操作数据表成功!" );
System.out.println( "----------------!" );
System.out.println("FetchSize:"+rs.getFetchSize());
//测试结果集是否支持滚动

while(rs.next())
{
i=i+1;
}
System.out.println(i);
rs.close();
st.close();
con.close();
}
catch(Exception err){
err.printStackTrace(System.out);
}
}
}

结果:
类实例化成功!
创建连接对像成功!
创建Statement成功!
操作数据表成功!
----------------!
FetchSize:10
Result set is scrollable
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at oracle.jdbc.driver.CharCommonAccessor.getBytes(CharCommonAccessor.java:491)
at oracle.jdbc.driver.OracleResultSetImpl.getBytes(OracleResultSetImpl.java:641)
at oracle.jdbc.driver.ScrollableResultSet.cacheRowAt(ScrollableResultSet.java:1461)
at oracle.jdbc.driver.ScrollableResultSet.isValidRow(ScrollableResultSet.java:1441)
at oracle.jdbc.driver.ScrollableResultSet.absolute(ScrollableResultSet.java:385)
at com.cafe.test.Test.main(Test.java:43)

我的数据库中有百万以上的数据。如何解决内存溢出的问题。按理说getfetch得到的是10,说明resultSet每次更新10行,不应该内存溢出啊。

...全文
919 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
我真的很懒 2011-11-08
  • 打赏
  • 举报
回复
我现在也遇到和LZ同样的问题呀,沉思了两天了还是没找到解决的方法呀,苦脑中。。。
wanghaoming100 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 sunnylyy 的回复:]
引用 37 楼 wanghaoming100 的回复:
引用 34 楼 sunnylyy 的回复:
不要用滚动结果集就行了,百万级小意思


兄弟,你没读懂这个帖子吧?


我还不至于那么笨,23楼的就是答案
[/Quote]

引用错误,本来想说35楼没读明白的,不好意思
sunnylyy 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 wanghaoming100 的回复:]
引用 34 楼 sunnylyy 的回复:
不要用滚动结果集就行了,百万级小意思


兄弟,你没读懂这个帖子吧?
[/Quote]

我还不至于那么笨,23楼的就是答案
yuanwenbo1226 2009-11-23
  • 打赏
  • 举报
回复
学习!
duduli 2009-11-23
  • 打赏
  • 举报
回复
#3 和 #23的都可以试试。
wanghaoming100 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 crazylaa 的回复:]
引用 30 楼 wanghaoming100 的回复:
请问大家,关于jdbc内部实现机制有没有详细的资料可以看,请大家推荐一下。


友情帮顶
http://www.itchinese.com/plus/view-137544-1.html

http://hi.baidu.com/274084093/blog/item/f03d5a66302bb02eaa184c6c.html
[/Quote]


哥们你真讲究!! 不但技术到位,人也讲究,呵呵。
wanghaoming100 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 sunnylyy 的回复:]
不要用滚动结果集就行了,百万级小意思
[/Quote]

兄弟,你没读懂这个帖子吧?
wanghaoming100 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 crazylaa 的回复:]
http://gotothework.javaeye.com/blog/219726

楼主看这个,上面第一个链接第二页开始打不开了。
[/Quote]
兄弟,百万级只是我用来测试造的数据。目前我还没有应用需求,只是我想研究学习一下jdbc的实现机制。
zhengzeng 2009-11-23
  • 打赏
  • 举报
回复
你要修改什么数据? 不能直接使用 update语句吗。
sunnylyy 2009-11-23
  • 打赏
  • 举报
回复
不要用滚动结果集就行了,百万级小意思
crazylaa 2009-11-23
  • 打赏
  • 举报
回复
http://gotothework.javaeye.com/blog/219726

楼主看这个,上面第一个链接第二页开始打不开了。
crazylaa 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 wanghaoming100 的回复:]
请问大家,关于jdbc内部实现机制有没有详细的资料可以看,请大家推荐一下。
[/Quote]

友情帮顶
http://www.itchinese.com/plus/view-137544-1.html

http://hi.baidu.com/274084093/blog/item/f03d5a66302bb02eaa184c6c.html
sxq129601 2009-11-23
  • 打赏
  • 举报
回复
3楼正解
wanghaoming100 2009-11-23
  • 打赏
  • 举报
回复
请问大家,关于jdbc内部实现机制有没有详细的资料可以看,请大家推荐一下。
donghaiting1256 2009-11-22
  • 打赏
  • 举报
回复
rs.moveNext()
laker_914 2009-11-22
  • 打赏
  • 举报
回复
分批查询吧,一下子全查出来,默认的内存肯定是不够的
铁匠梁 2009-11-22
  • 打赏
  • 举报
回复 1

Statement st = con.createStatement(
ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
javaors 2009-11-22
  • 打赏
  • 举报
回复
加些查询条件在查吧
javaors 2009-11-22
  • 打赏
  • 举报
回复
是你的数据量在数据库里面太大了,无法存到RESULTSET对象中
ccut205 2009-11-21
  • 打赏
  • 举报
回复
支持三楼
加载更多回复(22)

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧