Java 是否可以调用absolute函数,以便在类型为“仅向前”的结果集中向前移动行?

Java 是否可以调用absolute函数,以便在类型为“仅向前”的结果集中向前移动行?,java,jdbc,java-7,sqlexception,Java,Jdbc,Java 7,Sqlexception,从JAVA 7 API中,我们得到: “SQLException-如果发生数据库访问错误,则对关闭的结果集调用此方法,或者结果集类型仅为类型\u FORWARD\u” 但是JAVA SE 8 II认证书在第10章(JDBC)练习18中提到: String sql = "select name from animal order by id"; try (Connection conn = DriverManager.getConnection("jdbc:derby:zoo"); Sta

从JAVA 7 API中,我们得到:

“SQLException-如果发生数据库访问错误,则对关闭的结果集调用此方法,或者结果集类型仅为类型\u FORWARD\u

但是JAVA SE 8 II认证书在第10章(JDBC)练习18中提到:

String sql = "select name from animal order by id";
try (Connection conn = DriverManager.getConnection("jdbc:derby:zoo");
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery(sql)) {
    rs.absolute(0);

根据书中的答案,没有抛出异常。那么,是否有可能在带有绝对函数的纯类型“前进”结果集中前进呢?

不,您不能期望这会起作用,并且给出了JDBC的严格解释,对于驱动程序来说,仅对
类型“前进”结果集前进甚至是不正确的

javadoc明确表示:

抛出:
SQLException
-如果发生数据库访问错误;此方法在上调用 关闭的结果集或结果集类型为
type\u FORWARD\u ONLY

这并不意外。想一想,如果您先调用
absolute(5)
,然后在一个真正的
只向前键入
结果集上调用
absolute(1)
,会发生什么。第一个会成功,第二个不会:这是不一致的行为,应该避免

因此,这本书中的代码是错误的,作者依赖于(可能根本不知道)特定的数据库驱动程序,该驱动程序用于将
TYPE\u-FORWARD\u-ONLY
静默升级为
TYPE\u-SCROLL\u-sensitive
(这是一些驱动程序在中所做的-例如-auto-commit)。

“那么,是否有可能…”-我强烈怀疑这个问题的答案,就像许多其他JDBC问题的答案一样,是“它取决于您使用的特定JDBC驱动程序的实现。”