在TYPE_FORWARD_ONLY ResultSet 中可以调用absolute 函数移动到前面的行吗?
Can absolute function be called for moving at rows ahead in TYPE_FORWARD_ONLY ResultSet?
从 JAVA 7 API https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#absolute(int) 我们得到:
"SQLException - if a database access error occurs; this method is called on a closed result set or the result set type is TYPE_FORWARD_ONLY"
但是JAVASE 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中用absolute函数向前移动呢?
不,您不能指望它会起作用,并且根据对 JDBC 的严格解释,对于 TYPE_FORWARD_ONLY
结果集,驱动程序这样做甚至是不正确的。
javadoc 明确表示 ResultSet#absolute(int)
:
Throws:
SQLException
- if a database access error occurs; this method is called on
a closed result set or the result set type is TYPE_FORWARD_ONLY
这并不意外。想一想,如果您先调用 absolute(5)
,然后对真实的 TYPE_FORWARD_ONLY
结果集调用 absolute(1)
,会发生什么情况。第一个会成功而第二个调用不会:这是不一致的行为,应该避免。
所以那本书中的代码是错误的,作者依赖(可能甚至不知道)用于静默升级 TYPE_FORWARD_ONLY
到 TYPE_SCROLL_INSENSITIVE
的特定数据库驱动程序(这是一些驱动程序在做什么 - 例如 - 自动提交)。
从 JAVA 7 API https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#absolute(int) 我们得到:
"SQLException - if a database access error occurs; this method is called on a closed result set or the result set type is TYPE_FORWARD_ONLY"
但是JAVASE 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中用absolute函数向前移动呢?
不,您不能指望它会起作用,并且根据对 JDBC 的严格解释,对于 TYPE_FORWARD_ONLY
结果集,驱动程序这样做甚至是不正确的。
javadoc 明确表示 ResultSet#absolute(int)
:
Throws:
SQLException
- if a database access error occurs; this method is called on a closed result set or the result set type isTYPE_FORWARD_ONLY
这并不意外。想一想,如果您先调用 absolute(5)
,然后对真实的 TYPE_FORWARD_ONLY
结果集调用 absolute(1)
,会发生什么情况。第一个会成功而第二个调用不会:这是不一致的行为,应该避免。
所以那本书中的代码是错误的,作者依赖(可能甚至不知道)用于静默升级 TYPE_FORWARD_ONLY
到 TYPE_SCROLL_INSENSITIVE
的特定数据库驱动程序(这是一些驱动程序在做什么 - 例如 - 自动提交)。