java - 如何使用 JDBC 在文本文件中写入大量数据而不耗尽内存

标签 java jdbc recordset

我正在尝试使用 JDBC 从数据库创建转储文件。该文件的大小应约为 300 MB,包含 10 列中的 1.2 至 150 万条记录,但我在大约 25 万条时耗尽了内存。

我的问题是java是否将整个记录集存储在内存中?我已将记录集设置为只能向前读取,希望已转储的记录能够从内存中清除,但情况似乎并非如此。

任何帮助将不胜感激。

最佳答案

您应该在 Statement 对象上使用 setFetchSize。以下示例一次仅从 ResultSet 中获取 1000 条记录:

Connection con = DriverManager.getConnection("jdbc:my_subprotocol:my_subname");
Statement stmt = con.createStatement();
stmt.setFetchSize(1000);
ResultSet rs = stmt.executeQuery("SELECT * FROM your_table");

这是 Javadoc:

http://java.sun.com/javase/6/docs/api/java/sql/Statement.html#setFetchSize(int)

关于java - 如何使用 JDBC 在文本文件中写入大量数据而不耗尽内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1327380/

相关文章:

excel - 在 ADODB 记录集中使用 "SELECT SCOPE_IDENTITY()"

java - HystrixRuntime异常 : TestCommand fallback execution rejected

java - 在通过 RESTful WS 返回之前将元数据附加到对象的适当方法是什么?

mysql - ADODB.Recordset 无法获取 MySQL 数据库中最后插入的 ID

c++ - 我可以从函数返回 CRecordset 对象吗?

java - CallableStatement 的性能下降

java - 终止操作中执行什么事件

java - 通过 Excel 打开带有 UTF-8 BOM 的 CSV

java - 如何检查 Java JDBC 代码是否使用了正确的列名?

java - JDBC 结果集光标位置