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" */
我有一个 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" */