我有一个查询,它返回结果集中保存的数百万条记录。我必须处理(插入/更新)这些记录。我不想一次插入所有记录,而是将结果集拆分为每个500条记录的块,并存储在ArrayList
或Vector
中,并一次处理这500条记录。
如何将结果集拆分为块和&存储在ArrayList
或Vector
中而不会循环显示百万条记录?
我找到答案,得使用CachedRowSet而不是结果集。并使用set setPageSize
CachedRowSet crs = new CachedRowSetImpl();
crs.setPageSize(500);
crs.execute(conHandle);
然后使用
while(crs.nextPage()) {
collection obj = crs.toCollections();
}
这将确保我们可以将大数据处理成更小的块
但我在这里有一个想法,如何通过传递连接对象填充crs如何提到查询字符串??
答案 0 :(得分:4)
取决于您的SQL方言。例如,在PostgreSQL中,SELECT有OFFSET
和LIMIT
子句:
SELECT * FROM table LIMIT 500 OFFSET 0;
您仍然需要某种循环来生成查询以获取所有数百万条记录。
答案 1 :(得分:0)
您必须在单个查询中获取数据,因为在多用户环境中的多个查询中不会得到相同的结果。
如果客户端内存是问题 - 首先在文件中输出查询结果,并使用unix split命令分割文件。
您可以通过文件或bcp in解析工作表中的拆分数据文件,并在ArrayList中加载数据。