首页 > 解决方案 > 无游标的 JDBC 读取

问题描述

我必须从数据库中读取大量数据(例如让我们考虑超过 500 000 条记录)。然后我必须将读取的数据保存到文件中。我对光标有很多问题(不仅仅是内存问题)。

是否可以在没有光标的情况下执行此操作,例如使用流?如果是这样,我该如何实现?

标签: javajdbcjava-8

解决方案


我曾处理过大量数据(近 5 亿条记录)。我只是使用 PreparedStatement 查询、ResultSet 和一些缓冲区调整:

setFetchSize(int)

就我而言,我将程序拆分为线程,因为巨大的表被分区(每个线程处理一个分区),但我认为这不是你的情况。通过游标获取数据是没有意义的。我宁愿使用数据库视图或 SQL 查询。不要为此目的使用 ORM。

根据您的评论,您最好的选择是限制 JDBC 仅获取特定数量的行而不是获取所有行(这有助于更快地开始处理并且不会将整个表加载到 ResultSet 中)。将数据保存到集合中并使用 BufferedWriter 将其写入文件。您还可以从多核 CPU 中受益,使其在更多线程中运行 - 比如第一个获取的行在 1 个线程中运行,其他获取的行在第二个线程中运行。如果是线程,请使用同步集合,并注意您可能会遇到排序问题。


推荐阅读