6

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

java.lang.OutOfMemoryError: Java heap space

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

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

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

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

4

2 回答 2

4

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

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

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

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
              java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);
于 2013-04-26T12:29:43.253 回答
0

也许做一个懒惰的搜索,例如只提取 ID 或其他东西,然后当你想使用/显示你的数据时,只对那个 ID 进行查询?

或者也许改为在一个线程中运行它,所以它只是关闭并在后台执行

于 2013-04-26T13:05:38.863 回答