为什么会出现 OutOfMemoryError? 怎么解决?

GoldApple 2002-06-03 05:29:18
数据库是 Oracle,使用的是 Oracle 提供的 JDBC thin Driver,程序大致的流程是:
Connection conn = new Connection(url,user,password);
PrepareStatement pstmt=conn.prepareStatement(sql.toString(),
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

ResultSet rs=pstmt.executeQuery();
rs.absolute(begin); // begin 是传入的参数,表示从第几个记录开始读取,end 表
//示到第几个结束。用作分页用途
for (i=begin;i<=end;i++)
{
Object obj=rs.getObject(1);
。。。
if (!rs.next()) break;
}

如果一个表数据量较少(<250000),那么可以正常的读取,如果表的数据量较大
(例如100万),当要提取第800000-800009条记录时,过一段时间就会从后台出现
java.lang.OutOfMemoryError 这样的错误。请问各位高手有何良方可以避免此种情况
出现?

谢过!!!
...全文
60 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
uu_snow 2002-06-03
  • 打赏
  • 举报
回复
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY
这两个参数可能选的不对,你找文档看一下,具体我忘了,不过通过调节这个两个参数应该可以解决
KingSunSha 2002-06-03
  • 打赏
  • 举报
回复
recordset本身不放在客户端内存中,只是从jdbc接口获取了一个类似指针的cursor,从这点来说,应该不会造成内存的大量占用。
我怀疑是在因为在过程中的代码占用了大量的内存并没有及时释放,比如object类型,你可以注释掉其中的部分代码看看是不是能处理更多的纪录。

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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