小编典典

jdbc数据集是否将所有行存储在jvm内存中

java

我正在使用Java
JDBC应用程序从数据库中获取约500,000条记录。使用的数据库是Oracle。取出每一行后,我立即将数据写入文件。由于完成整个数据的获取大约需要一个小时,因此我试图增加结果集的获取大小。我已经在多个链接中看到,在增加访存大小的同时,应该注意内存消耗。增加获取大小实际上是否会增加jvm使用的堆内存?
假设获取大小为10,并且程序查询总共返回100行。在第一次读取期间,结果集包含10条记录。读取前10条记录后,结果集将获取下10条记录。这是否意味着在第二次获取后,数据集将包含20条记录?较早的10条记录是否仍保留在内存中,还是在获取较新的批次时将其删除了?任何帮助表示赞赏。


阅读 183

收藏
2020-11-26

共1个答案

小编典典

这取决于。不同的驱动程序可能会有所不同,并且不同的ResultSet设置可能会有所不同。

如果你有CONCUR_READ_ONLYFETCH_FORWARDTYPE_FORWARD_ONLY
ResultSet,司机几乎肯定会积极地存储在内存中的行数对应于您的获取大小(较早行,当然数据将保留在内存中一段时间,直到它被收集的垃圾)。TYPE_SCROLL_INSENSITIVE
ResultSet另一方面,如果您有一个,驱动程序很有可能会将获取的所有数据存储在内存中,以便允许您在数据之间来回滚动。这不是实现此行为的唯一可能方法,因此不同的驱动程序(和不同版本的驱动程序)可能具有不同的行为,但这是我遇到的大多数驱动程序的最简单方式。

2020-11-26