【发布时间】:2016-05-12 11:34:47
【问题描述】:
我确实有一个大型 MySQL 数据库表(超过 100 万条记录)。我需要读取所有数据并使用 java 语言对它们进行一些处理。
我想通过在内存中获取整个结果集来确保 java 进程不应该消耗更多的内存。
在查看基于光标的实现时,我发现了一些选项,
- 使用 Spring JDBCTemplate 覆盖 ResultSetExtractor 或 RowCallbackHandler 并顺序读取行。
- 使用 Spring Batch JDBCCursorItemReader/JDBCPagingItemReader 的其他选项。
有人能解释一下这两个选项有什么区别吗?
【问题讨论】:
-
标签批处理文件用于批处理编程,其中涉及创建执行 cmd 命令的批处理文件。在询问 Spring 批处理或对一批文件进行操作时,不应使用它。有关详细信息,请参阅this
-
从名称本身可以清楚地看出,spring batch 用于一些定期运行或计划运行的批处理任务
JDBCTempllate抽象了所有与 JDBC 相关的复杂性,例如打开连接、创建语句、读取结果集以及最后将它们全部关闭并提交检查SQLException。现在取决于你想如何以及在哪里使用它? -
@DennisvanGils,现在更正了。
-
@Braj,从名称上很清楚,但功能方面我想知道区别。我运行了一个简单的程序,它使用 ResultSetExtractor 和 JdbcCursorItemReader 读取数据。对我来说,JDBCTemplate ResultSetExtractor 比 JdbcCursorItemReader 花费了更多时间。我不明白同样的原因。