1. PreparedStatement ps = con.prepareStatement("select * from myTableName",
ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
2. //ps.setFetchSize(Integer.MIN_VALUE);
3. ResultSet rs = ps.executeQuery();
当myTableName这个表的数据量比较大时(100w条),第3行会抛出内存溢出异常。
解决办法:加上第2行可以解决问题.
注意:第2行不能写成ps.setFetchSize(1);
4. PreparedStatement ps2 = con.prepareStatement("select * from myTable2");
5. ResultSet rs2 = ps2.executeQuery();
但是,当去掉第2行的注释后,第5行会抛出异常。因为设置了ps.setFetchSize(Integer.MIN_VALUE)后,
在rs关闭之前,在con上不能打开其他的ResultSet.
解决办法:如果前面的结果集必须处于打开状态,则后面要打开的结果集可以在另一个Connection上打开。
本文介绍了解决从大型数据库表(如包含100万条记录)中查询数据时遇到的内存溢出问题的方法。通过设置PreparedStatement的取值大小为Integer.MIN_VALUE可以有效避免内存溢出;但需要注意的是,这将限制在同一连接上打开其他ResultSet的能力。
2328

被折叠的 条评论
为什么被折叠?



