java - 如何在不循环的情况下将 Java 中的结果集拆分为 block (每个 block 500 行)?

标签 java optimization jdbc sybase resultset

我有一个查询,它返回结果集中保存的数百万条记录。我必须处理(插入/更新)这些记录。我不想一次性插入所有记录,而是希望将结果集拆分为每个 500 条记录的 block ,然后存储在 ArrayList 或 Vector 中,并按某个时间处理这 500 条记录。时间。

如何将结果集分割成 block 并存储在 ArrayListVector 中而不循环遍历百万条记录?

我找到了答案,必须使用 CachedRowSet 而不是结果集。并使用设置setPageSize

CachedRowSet crs = new CachedRowSetImpl(); 
crs.setPageSize(500); 
crs.execute(conHandle); 

然后使用

  while(crs.nextPage()) {

        collection obj = crs.toCollections();
 }

这将确保我们可以将大数据处理成较小的 block

但是我这里有一个问题,如何通过传递连接对象来填充crs,其中提到查询字符串??

最佳答案

取决于您的 SQL 方言。例如,在 PostgreSQL 中,SELECT 有 OFFSETLIMIT 子句:

SELECT * FROM table LIMIT 500 OFFSET 0;

您仍然需要某种循环来生成查询来获取所有数百万条记录。

关于java - 如何在不循环的情况下将 Java 中的结果集拆分为 block (每个 block 500 行)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5993974/

相关文章:

java - 如何增强我的 AddressBook addEntry() 方法?

php - MYSQL 和 LIMIT 子句

php - 共享主机网站优化(美国服务器)

java - 带有 JDBC 的 Android。 createStatement() 不存在?

java - 将 DriverManager.getConnection 与 UCanAccess 一起使用时的内存消耗

java - Eclipse:无法加载 JNI 共享库“C:\Program Files(x86)\Java\jdk1.7.0_15\bin\..\jre\bin\client\jvm.dll

java - 如何在贪吃蛇游戏中,在没有被蛇或障碍物占据的 field 上生成食物?

Java EE 参数约束配置奇怪的行为

performance - 大O,对一系列n个数字求和的复杂性是多少?

java - 名称 [资源] 未在此上下文中绑定(bind)。找不到 [jdbc]