Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无光标读取JDBC 我必须从数据库中读取大量数据(例如让我们考虑500个以上的000个记录)。然后我必须将读取的数据保存到一个文件中。我对游标有很多问题(不仅仅是内存问题)_Java_Jdbc_Java 8 - Fatal编程技术网

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

Java 无光标读取JDBC 我必须从数据库中读取大量数据(例如让我们考虑500个以上的000个记录)。然后我必须将读取的数据保存到一个文件中。我对游标有很多问题(不仅仅是内存问题),java,jdbc,java-8,Java,Jdbc,Java 8,是否可以在没有光标的情况下执行此操作,例如使用流?如果是这样的话,我该如何实现它呢?我有处理海量数据(近5亿条记录)的经验。我只是简单地使用了PreparedStatement查询、ResultSet和of cource,通过以下方式对缓冲区进行了一些调整: setFetchSize(int) 在我的例子中,我将程序分为多个线程,因为巨大的表是分区的(每个线程处理一个分区),但我认为这不是您的情况。 通过游标获取数据是没有意义的。我宁愿使用数据库视图或SQL查询。不要为此目的使用ORM 根据您

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

我有处理海量数据(近5亿条记录)的经验。我只是简单地使用了PreparedStatement查询、ResultSet和of cource,通过以下方式对缓冲区进行了一些调整:

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


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

你能展示一些代码吗?你是如何将代码分割成线程的?“或适当的SQL查询”是什么意思?请扩大你的范围answer@ThomasBanderas请更准确地描述您的问题,以便我能够回答您的具体需求。我想从表中选择*并进行一些映射(例如,更改一些列名)并将其写入文件。首先,当我想通过一个查询获取整个表时,我有内存问题,现在我使用分页,但它非常慢。如何将程序分割成线程很有趣。为了将来的参考,800万条记录算不了什么@雅各布。请添加一些有用的注释,而不是你正在使用的数据库系统和驱动程序(我猜是MySQL,因为它有总是获取所有行的习惯),并请显示使用的代码。JDBC驱动程序可以(并且取决于具体用途)批量获取行,这意味着如果使用正确,内存不是问题。@Thomas-请您的问题指出您正在使用的数据库平台,并包括一个示例,向我们展示您正试图做的事情。