ResultSet.getRow() 显示行号 0 而不是 x

ResultSet.getRow() displays row number 0 instead of x

我们最近将 Oracle JDBC 驱动程序从 ojdbc5(版本 11gr2)升级到 ojdbc8 (21.3.0.0),我们注意到一个我们无法解释的不同行为。

boolean stillDataToProcess = true;
int bufferSize = 20000;

while (stillDataToProcess) {
    ResultSet rs = getData();

    for (int i=0; i< bufferSize; i++) {
        if (rs != null && rs.next()) {
            // some stuff
        } else {
            stillDataToProcess = false
            break;
        }
    }

    log.info("row number : " + rs.getRow());

    // some stuff
}

升级前的日志

row number : 20000
row number : 40000
row number : 60000
row number : 80000
row number : 100000
row number : 120000
row number : 124851

升级后的日志

row number : 20000
row number : 40000
row number : 60000
row number : 80000
row number : 100000
row number : 120000
row number : 0

JavaDoc for ResultSet.getRow() 说明了此方法 returns 的值:

the current row number; 0 if there is no current row

一旦 rs.next() 被调用并且 returns false, 可以说不再有当前行,因为你已经离开了行集合的末尾结果集。据我所知,在这种情况下,0 是 return 的正确值。

为什么旧版本的JDBC驱动程序return在结果集用完时编辑最后一行的行号我不能说。我曾查找过此驱动程序的变更日志,但我无法轻易找到。

很遗憾,您失去了一种计算已处理行数的简便方法。仍然可以通过其他方式确定此计数,但这只需要您多做一些工作。