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在结果集用完时编辑最后一行的行号我不能说。我曾查找过此驱动程序的变更日志,但我无法轻易找到。
很遗憾,您失去了一种计算已处理行数的简便方法。仍然可以通过其他方式确定此计数,但这只需要您多做一些工作。
我们最近将 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在结果集用完时编辑最后一行的行号我不能说。我曾查找过此驱动程序的变更日志,但我无法轻易找到。
很遗憾,您失去了一种计算已处理行数的简便方法。仍然可以通过其他方式确定此计数,但这只需要您多做一些工作。