java - 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
有一些帮助,但我不知道如何使用它。感谢您提供的任何帮助。
解决方案
使用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" */
推荐阅读
- python - Pandas - 用名称 ID 替换数字字符串
- unit-testing - 在 Golang 中模拟具有依赖关系的结构
- amazon-s3 - 当数据源为 Lambda 函数时,使用 AppSync 将图像上传到 AWS S3
- python - Python WebSocketApp 信息
- css - 如何正确使 flex-box 子项滚动
- java - 在电子邮件正文中发送带有动态内容的图像
- python - 如何在 Scrapy 中抓取分页链接?
- c++ - 为什么我们应该在下面的代码中使用模板包装器?
- ruby - NeoVim/ALE/RuboCop/Syntastic 可以捕捉到这个 Ruby 错误吗?
- r - 按 R 中的一列值对数据框进行排序