Java sql select 来自 db 分批

Java sql select from db in batches

我有一个 postgres table,其中包含数百万个条目,我希望分批查询 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 有一些帮助,但我不确定如何使用它。感谢您提供的任何帮助。

使用 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" */