我对下一个(),上一个()&中的同一点有疑问。绝对() 在这些布尔方法中
如果返回false,则光标的位置会发生变化 例如: 1)Incase of next():
ResultSet rs = new Result();
while (rs.next())
System.out.println(rs.getInt(1));
rs.next(); // it will return false but will the cursor be after after last ?!
2)incase of absolute():
ResultSet rs = new Result();
rs.absolute(15); //assuming I've only 10 rows it will return false but will the cursor be advanced ?
如果答案是它们只有在返回true时才会改变,那么为什么有一个方法会让我超出行范围,因为afterLast()?
顺便说一句,我已经检查了java文档,但我没有找到问题的答案...
答案 0 :(得分:0)
afterLast()
可用于强行耗尽RestulSet
。如果ResultSet
是可以苛刻的,另一种用法是使用previous()
方法向后迭代它:
ResultSet rs = ...;
rs.afterLast();
while (rs.previous()) {
// do something.
}
诚然,我无法理解这样做的任何好理由,但这是可行的。
编辑:
关于如果在最后一行之后已经定位的next()
上调用ResultSet
会发生什么情况的问题 - 这取决于JDBC驱动程序的实现。有些驱动程序只是默默地返回false
并且不会更改ResultSet
的状态,而有些可能会使SQLException
的呼叫失败。更具体地说,请引用文档:
如果结果集类型为TYPE_FORWARD_ONLY,则由供应商指定其JDBC驱动程序实现是返回false还是在后续调用next时抛出SQLException。