在我的Java代码中,我使用select语句访问oracle数据库表。
我收到很多行(大约50.000行),因此rs.next()需要一些时间来处理所有行。

using ResultSet, the processing of all rows (rs.next) takes about 30 secs

我的目标是加快此过程,因此我更改了代码,现在使用了CachedRowSet:
using CachedRowSet, the processing of all rows takes about 35 secs

我不明白CachedRowSet为什么比正常的ResultSet慢,因为CachedRowSet一次检索所有数据,而ResultSet每次调用rs.next都检索数据。

这是代码的一部分:
try {
    stmt = masterCon.prepareStatement(sql);
    rs = stmt.executeQuery();

    CachedRowSet crset = new CachedRowSetImpl();
    crset.populate(rs);

    while (rs.next()) {
        int countStar = iterRs.getInt("COUNT");
        ...
    }
} finally {
    //cleanup
}

最佳答案

是什么让您认为ResultSet会在每次调用rs.next()时检索数据?这完全取决于实现的工作方式-如果一次获取一个块,我不会感到惊讶。可能是相当大的一块。

我怀疑您基本上是在看到将所有数据复制到CachedRowSet然后访问全部数据所花费的时间-基本上,您没有目的进行了额外的复制操作。

10-07 12:17