如何将Java中的结果集拆分为块(每行500行)而不进行循环?

时间:2011-05-13 15:10:38

标签: java optimization jdbc sybase resultset

我有一个查询,它返回结果集中保存的数百万条记录。我必须处理(插入/更新)这些记录。我不想一次插入所有记录,而是将结果集拆分为每个500条记录的块,并存储在ArrayListVector中,并一次处理这500条记录。

如何将结果集拆分为块和&存储在ArrayListVector中而不会循环显示百万条记录?

我找到答案,得使用CachedRowSet而不是结果集。并使用set setPageSize

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

然后使用

  while(crs.nextPage()) {

        collection obj = crs.toCollections();
 }

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

但我在这里有一个想法,如何通过传递连接对象填充crs如何提到查询字符串??

2 个答案:

答案 0 :(得分:4)

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

SELECT * FROM table LIMIT 500 OFFSET 0;

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

答案 1 :(得分:0)

您必须在单个查询中获取数据,因为在多用户环境中的多个查询中不会得到相同的结果。

如果客户端内存是问题 - 首先在文件中输出查询结果,并使用unix split命令分割文件。

您可以通过文件或bcp in解析工作表中的拆分数据文件,并在ArrayList中加载数据。