如何处理大型ResultSet中的数据而不将它们全部加载到内存中?

时间:2013-05-31 15:20:22

标签: java sql jdbc resultset

我的数据库托管于mysql服务器&我正在使用Java来分析数据。

我的问题:执行'Select'查询后,将返回2.5 GB的结果集。我不想将所有数据加载到内存中。那么有什么方法可以不断检索数据和处理它?<​​/ p>

'按行限制'不是一个选项,b / c此2.5 GB数据已加入&amp;从4个表中检索。所以'按行限制'会增加我的总运行时间。

我已经尝试过statement.setFetchSize(50),但它似乎没有像我预期的那样工作。

任何建议都将非常感谢!谢谢!

2 个答案:

答案 0 :(得分:1)

Statement stmt = readOnlyConn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,                     java.sql.ResultSet.CONCUR_READ_ONLY);

stmt.setFetchSize(Integer.MIN_VALUE的);

上面的代码解决了我的问题。谢谢你的帮助!

答案 1 :(得分:0)

  

BlockquoteStatement stmt = readOnlyConn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,java.sql.ResultSet.CONCUR_READ_ONLY);   stmt.setFetchSize(Integer.MIN_VALUE的);   上面的代码解决了我的问题。谢谢你的帮助!

是的,但如果您使用的是postgres,您还必须关闭自动提交! (工作2小时后实现= D)

see postgres docs here