Java 执行大查询时内存不足?

Java 执行大查询时内存不足?,java,mysql,heap-memory,large-query,Java,Mysql,Heap Memory,Large Query,我在尝试执行大查询时收到此错误 java.lang.OutOfMemoryError: Java heap space 我搜索发现,对我准备的语句应用setAutoCommit(false)和setFetchSize方法可能有助于处理大型查询。 然而,当我使用它时,我收到了这个错误 java.sql.SQLException: Illegal value for setFetchDirection(). 处理大型查询的正确且简单的方法是什么 使用setFetchSize的正确方法是什么?假设

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

java.lang.OutOfMemoryError: Java heap space
我搜索发现,对我准备的语句应用setAutoCommit(false)setFetchSize方法可能有助于处理大型查询。 然而,当我使用它时,我收到了这个错误

java.sql.SQLException: Illegal value for setFetchDirection().
处理大型查询的正确且简单的方法是什么


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

假设您使用的是MySQL提供的
连接器/J
驱动程序,我相信解决方案可以在中找到(注意
连接::createStatement()的参数1
):

如果您使用的结果集包含大量行或 较大的值,并且无法在JVM中为 如果需要内存,您可以告诉驱动程序将结果流式返回 一次一排

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


也许做一个懒散的搜索,例如只拉ID或其他什么,然后当你想使用/显示你的数据时,从一个ID上进行查询


或者在线程中运行它,这样它就可以在后台运行了

使用示例代码提供建议会更容易。不过,对于这种情况,最常见的答案是将查询分解为更多可管理的块。你真的一次需要所有这些数据吗?在
SQL
控制台上运行同一查询时,你会得到多少行,同时尝试增加
heap\u size
以获取java@Simonatmso.net的可能副本-我恐怕无法共享。但我能说的是,查询字符串并没有得到优化,而且有些可怕。太糟糕了,修改它不容易(在我开始工作之前它已经坏了;P)。@Akash我也尝试过“限制0,1”,但它仍然无法查询。我来检查一下堆的大小。很抱歉,我忘了提到我使用java、JDBC和mysql。是否可以将setFetchSize与prepared语句一起使用?因为
公共接口PreparedStatement扩展了statement
,我想是的。同样,我会考虑使用代码< >连接::PraveRealScript(String SQL,int ReultStType,int ReultStand CONTROUNCE)< /Cult>来创建这样的<代码> PravaReDebug < /C>。
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
              java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);