从JAVA 7 API https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#absolute(int)我们得到:
" SQLException - 如果发生数据库访问错误;在关闭的结果集上调用此方法,或者结果集类型为TYPE_FORWARD_ONLY "
但是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);
根据书中的答案,没有例外。那么,是否可以使用绝对函数在TYPE_FORWARD_ONLY ResultSet中前进?
答案 0 :(得分:1)
不,你不能指望这个工作,并且对JDBC有严格的解释,对于TYPE_FORWARD_ONLY
结果集的驱动程序来说甚至是不正确的。
javadoc明确地说ResultSet#absolute(int)
:
<强>抛出:强>
SQLException
- 如果发生数据库访问错误;调用此方法 结束集或结果集类型为TYPE_FORWARD_ONLY
这并不意外。想一想,如果您先在真实absolute(5)
结果集上调用absolute(1)
然后TYPE_FORWARD_ONLY
,会发生什么。第一个会成功,第二个调用不会:这是不一致的行为,应该避免。
因此该书中的代码是错误的,并且作者依赖于(可能甚至不知道)用于静默升级TYPE_FORWARD_ONLY
到TYPE_SCROLL_INSENSITIVE
的特定数据库驱动程序(这是一些驱动程序在 - 例如 - 自动提交)。