使用Java从postgreSQL处理大量数据

时间:2015-01-29 14:23:38

标签: java database postgresql jpa

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

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

在内存中处理1000条记录,处理并转到下一个1000的最佳方法是什么? 有人有想法吗?

1 个答案:

答案 0 :(得分:2)

默认情况下,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提供商。