java.sql.ResultSet.next()描述

时间:2014-12-03 19:39:10

标签: mysql jdbc

我对下一个(),上一个()&中的同一点有疑问。绝对() 在这些布尔方法中

如果返回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文档,但我没有找到问题的答案...

1 个答案:

答案 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。