我在尝试进行大查询时收到此错误。
java.lang.OutOfMemoryError: Java heap space
我搜索过并发现将 setAutoCommit(false)和 setFetchSize 方法应用到我准备好的语句可能有助于处理大查询。 但是,当我使用它时,我收到了这个错误。
java.sql.SQLException: Illegal value for setFetchDirection().
处理大型查询的正确方法是什么?
使用setFetchSize的正确方法是什么?
答案 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上使用/显示你的数据吗?
或者可能在一个线程中运行它,所以它只是在后台运行