我正在尝试从 PostgreSQL 中的一个非常大的表(300GB)预先生成报告。我做这样的事情:
rs = stmt.executeQuery("SELECT * FROM tbl");
System.out.println("select all finished");
while (rs.next()) {
/* generate report and save it in report table */
/* generated reports are not in memory,
* They are saved in a summary table in each iteration */
}
当我启动它给出的应用程序时Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
。我尝试使用stmt.setFetchSize(1000)
但它并没有解决问题。
解决办法是什么?我在 Debian 6.0.5 和 openJDK 6 上使用 PostgreSQL 8.4.11。
[更新]
打印的堆栈跟踪显示OutOfMemoryError
异常已rs = stmt.executeQuery("SELECT * FROM tbl");
在线生成。也System.out.println("select all finished");
从不显示。
- 我正在运行
autocommit
模式。 stmt.getResultSetConcurrency()
返回 1007。stmt.getResultSetHoldability()
返回 2。rs.getType()
返回 1003。