Java 如何处理大型ResultSet中的数据而不将其全部加载到内存中?
我的数据库托管在mysql服务器上&我使用Java分析数据 我的问题:执行“选择”后,查询将返回2.5 GB的结果集。我不想把所有的数据都加载到内存中。那么,有没有什么方法可以让我不断地检索和处理数据呢 “按行限制”将不是选项,b/c此2.5 GB数据是从4个表联接和检索的。所以“按行限制”将大大增加我的总运行时间 我试过statement.setFetchSize(50),但它似乎没有像我预期的那样工作Java 如何处理大型ResultSet中的数据而不将其全部加载到内存中?,java,sql,jdbc,resultset,Java,Sql,Jdbc,Resultset,我的数据库托管在mysql服务器上&我使用Java分析数据 我的问题:执行“选择”后,查询将返回2.5 GB的结果集。我不想把所有的数据都加载到内存中。那么,有没有什么方法可以让我不断地检索和处理数据呢 “按行限制”将不是选项,b/c此2.5 GB数据是从4个表联接和检索的。所以“按行限制”将大大增加我的总运行时间 我试过statement.setFetchSize(50),但它似乎没有像我预期的那样工作 任何建议都将不胜感激!谢谢 语句stmt=readOnlyConn.createState
任何建议都将不胜感激!谢谢 语句stmt=readOnlyConn.createStatement(仅java.sql.ResultSet.TYPE_FORWARD_), java.sql.ResultSet.CONCUR\u只读) stmt.setFetchSize(Integer.MIN_值) 上面的代码解决了我的问题。谢谢你的帮助 BlockquoteStatement stmt=readOnlyConn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,java.sql.ResultSet.CONCUR_READ_ONLY); stmt.setFetchSize(Integer.MIN_值); 上面的代码解决了我的问题。谢谢你的帮助 是的,但是如果你使用postgres,你还必须关闭自动提交!(工作2小时后实现=D)
我会增加您的堆大小。如果你需要处理2.5 GB的数据,那么拥有8-32 GB的内存听起来并不是很多。你想看看这里:嗨,Jaroslav,这并没有提供问题的答案-它确实属于对另一个答案的评论,但你需要赢得更多的声誉才能,因此,在此期间,你需要集中精力发布高质量的原始答案和问题,以赢得声誉。