Jea*_*art 9 java sql spring jdbc spring-jdbc
这是我的问题:在我的Java程序中的某个时刻,我使用Spring的SimpleJdbcTemplate类从数据库中获取(非常)大的事件列表.
List<Event> events =
this.simpleJdbcTemplate.query(myQuery,
myMapper(),
new Object[] {
filter.getFirst(),
filter.getSecond(),
filter.getThird()}
);
Run Code Online (Sandbox Code Playgroud)
问题是该列表可能包含600,000个事件...因此使用大量内存(并且还需要时间来处理).
但是我并不需要一次检索所有事件.实际上我希望能够遍历列表,只读取一些事件(链接到特定的KEY_ID - sq查询myQuery按KEY_ID排序),处理它们并最终返回迭代,让垃圾收集器摆脱以前和已处理的事件,以便我永远不会超过一定的内存量.
有没有一种很好的方法可以使用Spring库(或任何库)?
干杯,Vakimshaar.
我认为你的问题的一部分是你的查询一次性执行,你得到的结果集很大,占用了内存和网络带宽.除了需要一种迭代结果集的方法之外,您还需要一种方法来逐步从数据库中获取结果.看看这个关于延迟加载结果集的答案.看起来您可以结合使用ResultSetExtractor设置获取大小,并可能获得所需的行为(取决于数据库).
如果我理解正确,您希望迭代结果集,但对构建完整的结果列表不感兴趣。
只需使用带有ResultSetExtractoras 参数的查询方法即可。可以ResultSetExtractor使用映射器将当前行转换为Event. 将每个事件放入列表中,直到到达不同的 KEY_ID 或结果集末尾,然后继续处理事件列表并清除列表。