回答

收藏

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

技术问答 技术问答 169 人阅读 | 0 人回复 | 2023-09-14

我正在使用我的数据库apache& _$ G' C* K5 U% t: r4 m
derby。我可以插入数据库。以下是试图显示我唯一的表’MAINTAB’代码摘录的内容。java.sql.Connection的实例为’dbconn’。
9 s  C9 J+ H- K: M                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");}以下是输出。% s9 T7 F% B' J; ]
org.apache.derby.jdbc.EmbeddedDriver loaded.Database testDB connectedtruefalseTable fetch failed or result data failed---SQLException Caught---SQLState:   XCL16Severity: 20000Message:  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 moreDatabase shut down normally第一次要求验证时AUTOCOMMIT是否为OFF时,我从Derby文档中发现默认情况下AUTOCOMMIT打开任何连接。所以,我已经用过了dbconn.setAutoCommit(false)关掉它。还是会造成错误。
7 g  j/ X7 z4 A- u" I9 p. h+ Z错误之前的输出描述结果集已经正确获得。另外,请注意,即使我AutoCommit设置为false,也会导致同样的错误。同时,我在日食上跑德比。% T& Z+ o5 P9 E; X4 h
                                                               
6 q& u( Y  B$ e$ G    解决方案:                                                               
% l) U1 o8 u- p0 x2 c3 e$ V                                                                问题是您     读取结果集 之前    已关闭查询。关闭查询,关闭结果集,所以为什么会出现 ResultSet not# b& c3 W- [8 {' t* v) u
open错误。你应该在那里finally块末立即关闭查询:: Y; ~: F. X' ]; O: E) W  a) r3 X
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");
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则