做大查询时内存不足?

时间:2013-04-26 11:36:48

标签: java mysql heap-memory large-query

我在尝试进行大查询时收到此错误。

java.lang.OutOfMemoryError: Java heap space

我搜索过并发现将 setAutoCommit(false) setFetchSize 方法应用到我准备好的语句可能有助于处理大查询。 但是,当我使用它时,我收到了这个错误。

java.sql.SQLException: Illegal value for setFetchDirection().

处理大型查询的正确方法是什么?

使用setFetchSize的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

假设您使用的是MySQL提供的Connector/J驱动程序,我相信解决方案位于this manual page(注意Connection::createStatement()的参数1):

  

如果您正在使用具有大量行数的ResultSet   大值,并且无法在JVM中为堆空间分配堆空间   需要内存,您可以告诉驱动程序返回结果   一次一行。

     

要启用此功能,请按以下方式创建Statement实例:

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
              java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);

答案 1 :(得分:0)

也许做一个懒惰的搜索,例如只提取ID或其他什么时候你想在一个ID上使用/显示你的数据吗?

或者可能在一个线程中运行它,所以它只是在后台运行