首页 > 解决方案 > Java sql批量从db中选择

问题描述

我有一个包含数百万个条目的 postgres 表,我希望批量查询它10.000。这意味着我必须发送这样的查询:

SELECT id FROM my_table

而不是获得数百万个条目,我想要获得 10.000,然后将它们的 id 存储在一个数组中,对 id 做一些事情并继续读取下一批 10.000。有没有办法在Java中做到这一点?

到目前为止,我正在使用这样的准备好的语句:

ArrayList<String> ids = new ArrayList<String>();
String sql = "SELECT id FROM my_table ";
PreparedStatement statement = connection.prepareStatement(handleDatabaseSyntax(sql));
ResultSet rs = statement.executeQuery();
while(rs.next())
{
  ids.add(rs.getString(1));
}

我看到它PreparedStatement有一些帮助,但我不知道如何使用它。感谢您提供的任何帮助。

标签: javasqlpostgresqljdbc

解决方案


使用setFetchSize与 0 不同的值,以便 JDBC 驱动程序不会一次获取整个结果集。

然后循环类似于你是如何做到的:

statement.setFetchSize(200);
ResultSet rs = statement.executeQuery();
int counter = 0;
while (rs.next())
{
    ids.add(rs.getString(1));
    if (++counter % 10000 == 0)
    {
        /* do something with "ids" */
        ids.removeAll();
    }
}
/* do something with the remaining "ids" */

推荐阅读