做大查询时内存不足?

Att*_*eak 6 java mysql heap-memory large-query

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

java.lang.OutOfMemoryError: Java heap space
Run Code Online (Sandbox Code Playgroud)

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

java.sql.SQLException: Illegal value for setFetchDirection().
Run Code Online (Sandbox Code Playgroud)

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

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

Ran*_*eed 4

假设您正在使用 MySQL 提供的 MySQL Connector/J 驱动程序,我相信可以在本手册页中找到解决方案(注意 的参数 1 Connection::createStatement()):

如果您正在使用具有大量行或较大值的结果集,并且无法在 JVM 中分配堆空间来满足所需的内存,则可以告诉驱动程序一次将结果流回一行。

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

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
              java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);
Run Code Online (Sandbox Code Playgroud)