java - 使用 Java 处理来自 postgreSQL 的大量数据

标签 java database postgresql jpa

我需要用Java编写一个小程序,从postgreSQL数据库读取大量记录,将它们转换为JSON并将它们写入其他地方。

显然,如果我不想收到内存不足错误,我就无法同时加载所有记录(500000 行)。

在内存中加载 1000 条记录、处理并转到下 1000 条记录的最佳方法是什么? 有人有主意吗?

最佳答案

默认情况下,Postgres JDBC 驱动程序将完整的 ResultSet 加载到内存中。可以通过关闭自动提交并通过设置大于 0 的提取大小来启用基于游标的检索来防止这种情况。

详细信息参见手册:https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor

因此,如果您执行以下操作:

Connection con = ....; // open the connection
con.setAutoCommit(false);
Statement stmt = con.createStatement();
stmt.setFetchSize(1000);
ResultSet rs = stmt.executeQuery("select ...");
while (rs.next()) 
{
   // do something with the row
}

这永远不会将超过 1000 行加载到内存中。内存中保存的行数可以通过更改获取大小来控制。

我不知道JPA,但控制自动提交应该是直接的,但我不知道如何通过JPA控制获取大小。可能还取决于您的 JPA 提供商。

关于java - 使用 Java 处理来自 postgreSQL 的大量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28217044/

相关文章:

使用 mysql 的 Android 登录应用程序

postgresql - 在复杂查询中连接两个表(非统一数据)

java - 强制Log4J每天创建一个新文件(可能为空)

java - Android SQLite3 强制主键问题

python - 无法在 Windows 上安装正确版本的 mysql(8.0.13)

PostgreSQL 和文字游戏

node.js - 散列通过,比较结果

java - 来自 Eclipse 的 SuppressWarnings "all"投诉

java - JSON 错误消息

java - 有什么方法可以更改类路径中的属性文件吗?