当前位置: 首页 > 面试题库 >

结果集未打开。验证自动提交已关闭。Apache Debry

燕寒
2023-03-14
问题内容

我正在为我的数据库使用apache
derby。我能够对数据库执行插入操作。以下是尝试显示我唯一的表’MAINTAB’的内容的代码摘录。java.sql.Connection的实例为’dbconn’。

    ResultSet word;

    Statement query;

    String getData="SELECT THEWORD FROM MAINTAB";
    try{
        System.out.println(dbconn.getAutoCommit());
        query = dbconn.createStatement();
        word = query.executeQuery(getData);
        query.close();

        dbconn.setAutoCommit(false);
        System.out.println(dbconn.getAutoCommit());

        for(;word.next();)
            System.out.println(word.getString(1));

    }catch(Throwable e){
        System.out.println("Table fetch failed or result data failed");}

以下是输出。

org.apache.derby.jdbc.EmbeddedDriver loaded.
Database testDB connected
true
false
Table fetch failed or result data failed

---SQLException Caught---

SQLState:   XCL16
Severity: 20000
Message:  ResultSet not open. Operation 'getString' not permitted. Verify that autocommit is OFF.
java.sql.SQLException: ResultSet not open. Operation 'getString' not permitted. Verify that autocommit is OFF.
    at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedConnection.newSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.ConnectionChild.newSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedResultSet.checkIfClosed(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedResultSet.getString(Unknown Source)
Closed connection
    at test.ShowData.main(ShowData.java:30)
Caused by: java.sql.SQLException: ResultSet not open. Operation 'getString' not permitted. Verify that autocommit is OFF.
    at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(



Unknown Source)
    ... 9 more
Database shut down normally

当它第一次要求验证AUTOCOMMIT是否为OFF时,我从Derby文档中发现默认情况下AUTOCOMMIT对任何连接都是打开的。因此,我已使用dbconn.setAutoCommit(false)将其关闭。仍然会引发错误。

错误之前的输出说明结果集已正确获取。另外,请注意,即使我未将AutoCommit设置为false,也会引发相同的错误。之间,我在日食上跑德比。


问题答案:

问题是您 读取结果集 之前 已关闭查询。关闭查询,关闭结果集,因此为什么会出现“ ResultSet not
open”错误。您应该在finally块的最后立即关闭查询:

ResultSet word;

Statement query=null;

String getData="SELECT THEWORD FROM MAINTAB";
try{
    System.out.println(dbconn.getAutoCommit());
    query = dbconn.createStatement();
    word = query.executeQuery(getData);


    dbconn.setAutoCommit(false);
    System.out.println(dbconn.getAutoCommit());

    for(;word.next();)
        System.out.println(word.getString(1));

}catch(Throwable e){
    System.out.println("Table fetch failed or result data failed");
} finally{
    if(query!=null) {
        try {
             query.close();
        }
        catch(SQLException ex) {
              System.out.println("Could not close query");
        }
   }
}


 类似资料:
  • 有人能帮我吗?

  • 问题内容: 我知道Java中的安全模式是在finally块中依次关闭ResultSet,Statement和Connection。 如果您关闭连接,然后尝试关闭语句(不抛出异常)。但是,如果您尝试从语句中调用任何方法,则会引发异常。 我想知道关闭连接是否会自动关闭从该连接创建的所有语句对象? 更新: 我正在使用DatabaseProductVersion:Oracle Database 11g版本

  • 本文向大家介绍postgresql 如何关闭自动提交,包括了postgresql 如何关闭自动提交的使用技巧和注意事项,需要的朋友参考一下 postgresql中默认是自动提交的 查看是否是自动提交: 关闭自动提交: 另一种方式就在会话开始的时候以begin开始相当于关闭了自动提交,以end或者commit结束就可以了 补充:pg(hgdb)默认事务自动提交 默认情况下,AUTOCOMMIT(自动

  • 因此,当我在表单上输入信息后,它会用新表单刷新new.php页面,但不会提交任何信息。我没有错误,就像我在页面上点击刷新一样。我觉得我做的一切都是对的,但我似乎不明白为什么这不起作用。我刚刚从mysql过渡到mysqli,所以我有点像新手。它也没有回到home.php. new.php

  • 我知道Java中的安全模式是在finally块中按顺序关闭结果集、语句和连接。 若您关闭连接,然后尝试关闭语句(不引发异常)。但若您试图从语句中调用任何方法,则会引发异常。 我想知道关闭连接是否会自动关闭所有由该连接创建的语句对象? 更新:我正在使用DatabaseProductVersion:Oracle Database 11g Release 11.1.0.0.0驱动程序名称:Oracle

  • 我有一个spring应用程序,它的主页发出多个ajax调用,这些调用反过来从DB中提取数据并返回。DB已配置连接池,minPoolSize为50,maxPoolSize为100。 现在,当我打开主页时,大约有7个连接与DB建立,这是因为大约有7个ajax调用被调用,我假设所有调用都创建了自己的连接。现在,当我刷新页面时,我看到又建立了7个新连接(我看到db2监控中总共有14个物理连接),这似乎出乎