Ich verwende Apache Derby für meine Datenbank. Ich bin in der Lage, Einfügungen in die Datenbank vorzunehmen. Es folgt ein Auszug aus dem Code, der versucht, den Inhalt meiner einzigen Tabelle "MAINTAB" anzuzeigen. Die Instanz von java.sql.Connection ist '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");}
Die Ausgabe sieht folgendermaßen aus.
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
Bei der ersten Abfrage, ob AUTOCOMMIT ausgeschaltet ist, habe ich in der Derby-Dokumentation herausgefunden, dass AUTOCOMMIT standardmäßig für jede Verbindung eingeschaltet ist. Also habe ich es mit dbconn.setAutoCommit(false) ausgeschaltet. Trotzdem wird der Fehler ausgelöst.
Die Ausgabe vor dem Fehler erklärt, dass die Ergebnismenge ohne Fehler abgerufen wurde. Beachten Sie bitte auch, dass derselbe Fehler auch dann auftritt, wenn ich AutoCommit nicht auf false setze. Zwischen, ich bin derby auf Eclipse ausgeführt.