我有一个rowSetIterator,总共12行,rangeSize为5。我正在像下面那样访问行:
RowSetIterator rs = vo.getRowSetIterator();
int totalPages = rs.getEstimatedRangePageCount();
for(int pageIndex=0; pageIndex<totalPages; pageIndex++){
rs.scrollToRangePage(pageIndex + 1);
Row[] rows = rs.getAllRowsInRange();
for(int rowIndex=0; rowIndex<rows.length; rowIndex++){
Row row = rows[rowIndex];
print(row);
}
System.out.println("going to next page");
}
但是此代码导致打印行,如下所示:
1 2 3 4 5
going to next page
6 7 8 9 10
going to next page
8 9 10 11 12
going to next page
[有没有一种方法可以只检索滚动到最后一页时存在的其余行,即,仅访问第11行和第12行(来自上述示例)。
viewObject是一个可更新的对象,并且具有访问模式SCROLLABLE。
上述情况只是一个例子。在实际情况下,我正在处理更大的rangeSize和更大的数据。因此,需要一些帮助来调整我的viewObject使其更有效率。
viewObject是RowIterator,因此您不需要像这样循环遍历自己的循环。通过允许ADF框架处理范围导航,您不应两次遇到同一行。以下内容将使您接近:
vo.reset();//puts us at slot before first row
while(vo.hasNext())
{
Row row = vo.next();//Automatically navigates rangesets when needed
print(row);
}
如果您关注性能,请阅读:https://docs.oracle.com/middleware/1213/adf/develop/adf-bc-view-object-tuning.htm
如果要遍历所有行,则可能需要调整视图以使其具有更大的范围和读取大小(通常建议不超过100)。>>
最后,与您的原始问题更相关,您可能要确保未选中“视图”调整中的“在通过RowSet分页时填充行的最后一页”选项。