代码之家  ›  专栏  ›  技术社区  ›  Maurice

对未设置为TYPE\u SCROLL\u SENSITIVE或INSENSITIVE的结果集调用absolute()

  •  1
  • Maurice  · 技术社区  · 7 年前

    根据我的OCP学习书籍,以下情况不会引发异常:

    try(Connection conn = DriverManager.getConnection("jdbc:derby:zoo");
      Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery(sql)){
    
    rs.absolute(0);
    rs.next();
    System.out.println(rs.getString(1));
    }
    

    ResultSet.TYPE_SCROLL_INSENSITIVE

    当做

    2 回复  |  直到 7 年前
        1
  •  1
  •   Steve Chambers    4 年前

    这是OCP手册中的错误还是我遗漏了什么?

    简短回答:

    当我遇到这个问题的时候,我脑子里也有同样的问题,所以我自己试了一下。果然,在运行代码时引发了以下异常:

    Exception in thread "main" java.sql.SQLException: The 'absolute()' method is only allowed on scroll cursors.
      at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
      at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
      at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
      at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedResultSet.checkScrollCursor(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedResultSet.absolute(Unknown Source)
      at com.stevectest.Main.main(Main.java:11)
    Caused by: ERROR XJ061: The 'absolute()' method is only allowed on scroll cursors.
      at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
      at org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(Unknown Source)
      ... 7 more
    

    这与 absolute method's Javadoc

    抛出: SQLException 仅键入FORWARD\u

    还发现在 selikoff.net OCP Study Guide webpage 为此:

        2
  •  1
  •   Community CDub    4 年前

    Oracle documentation 可以向您提供更多详细信息,说明为什么这不会产生任何异常。根据文档,参数有默认值,如“type”和“concurrency”。

    语句createStatement()引发SQLException

    创建用于将SQL语句发送到数据库的语句对象。没有参数的SQL语句通常使用语句对象执行。如果多次执行同一个SQL语句,则使用 PreparedStatement

    默认情况下,使用返回的语句对象创建的结果集的类型为 TYPE_FORWARD_ONLY 并发级别为 CONCUR_READ_ONLY getHoldability() .

    返回:

    新的默认语句对象

    SQLException

    此外,一些驱动程序实现是宽松的,并且允许比JDBC所要求的更多,例如,一些驱动程序允许您将绝对值与仅向前的结果集一起使用,只要行索引是当前的或更高

    希望这能回答你的问题!