处理数据库中的所有行(PostgreSQL)时遇到问题.我得到一个错误:org.postgresql.util.PSQLException: Ran out of memory retrieving query results.
我认为我需要读取所有行的小块,但它不起作用 - 它只读取100行(下面的代码).怎么做?
int i = 0;
Statement s = connection.createStatement();
s.setMaxRows(100); // bacause of: org.postgresql.util.PSQLException: Ran out of memory retrieving query results.
ResultSet rs = s.executeQuery("select * from " + tabName);
for (;;) {
while (rs.next()) {
i++;
// do something...
}
if ((s.getMoreResults() == false) && (s.getUpdateCount() == -1)) {
break;
}
}
Run Code Online (Sandbox Code Playgroud) 当使用各种JDBC模板方法之一时,我对如何迭代/滚动大型结果集(不适合内存)感到困惑.即使没有直接暴露Iterable接口,我至少也会期望在查询执行时调用RowCallbackHandler的实例,而不是在它完成之后(或堆overfloats).
我确实看过这个(虽然在精神上类似于这篇关于堆栈溢出的帖子,但我没有改变任何内容)和春季论坛中的这篇文章.后者似乎建议在游标获取数据时确实应该调用回调处理程序.然而,我的测试显示没有这样的行为
该数据库是Oracle10g.我使用的是11.1.0.7.0-Production驱动程序和Spring 2.5.6.SEC01.任何人都想知道如何迭代结果集,最好是保持RowMapper等的映射逻辑?