我正在使用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");}
Run Code Online (Sandbox Code Playgroud)
以下是输出.
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
Run Code Online (Sandbox Code Playgroud)
当它首先要求验证AUTOCOMMIT是否为OFF时,我从Derby文档中发现默认情况下AUTOCOMMIT已打开为任何连接.所以,我使用dbconn.setAutoCommit(false)将其关闭.仍然,错误被抛出.
错误之前的输出说明结果集是在没有任何错误的情况下获取的.另请注意,即使我没有将AutoCommit设置为false,也会抛出相同的错误.之间,我在日食上跑德比.
dog*_*ane 17
问题是您在阅读结果集之前已关闭查询.关闭查询,关闭结果集,从而导致"ResultSet未打开"错误.您应该在一个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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17105 次 |
| 最近记录: |