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的正确方法是什么?
假设您正在使用 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)