You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Bill Robertson (JIRA)" <ji...@apache.org> on 2007/07/02 16:16:04 UTC
[jira] Closed: (DERBY-2886) Close autocommit(false) connection
causes exception with code 25000 when no transaction is pending
[ https://issues.apache.org/jira/browse/DERBY-2886?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Bill Robertson closed DERBY-2886.
---------------------------------
Resolution: Won't Fix
Not a bug
> Close autocommit(false) connection causes exception with code 25000 when no transaction is pending
> --------------------------------------------------------------------------------------------------
>
> Key: DERBY-2886
> URL: https://issues.apache.org/jira/browse/DERBY-2886
> Project: Derby
> Issue Type: Bug
> Components: JDBC
> Affects Versions: 10.2.1.6, 10.2.2.0
> Environment: Java 5 and Java 6
> Embedded Driver
> Win XP
> Reporter: Bill Robertson
>
> I have a simple program to demonstrate this. The interesting part creates a new connection, sets autocommit(false), executes a query, and the closes the connection. This generates an exception with result code 25000 and a message "Invalid transaction state." every time. According to the docs that I could find, that means that you're trying to close a connection with a pending transaction. However, there is no pending transaction because no inserts/updates/deletes/creates/drops etc. have been issued on the connection.
> So far, I have found a work around. If I set autocommit(true) before closing, I can close the connection without error. I'm not sure what the possible side effects of this are though.
> I'm not sure if I will be able to attach the test program, so here it is. Also included is sample output of it running under derby 10.2.1.6 and 10.2.2.0 in Java5 and Java 6.
> ----- TestBoom.java ----------------------------------------------------
> import java.sql.*;
> import org.apache.derby.jdbc.EmbeddedDriver;
> public class TestBoom {
> public static void main(String[] args) throws Exception {
>
> // register driver
> EmbeddedDriver registerMe = new EmbeddedDriver();
> // create a datbase with a table that has one row
> Connection conn = DriverManager.getConnection("jdbc:derby:foo;create=true");
> Statement s=conn.createStatement();
> s.executeUpdate("create table foo(foo int)");
> s.close();
> s = conn.createStatement();
> s.executeUpdate("insert into foo values (1)");
> s.close();
> conn.close();
> // create a connection, disable autocommit, issue a query and
> // close the connection
> conn = DriverManager.getConnection("jdbc:derby:foo");
> conn.setAutoCommit(false);
> PreparedStatement ps = conn.prepareStatement("select foo from foo where foo = 1");
> ResultSet rs = ps.executeQuery();
> if(rs.next()) {
> System.out.println(rs.getInt(1));
> }
> rs.close();
> ps.close();
> // conn.setAutoCommit(true); // uncomment this line and the close will not throw
> conn.close(); //boom
> }
> }
> -------------------------------------------------------------------------------
> ----- Output (derby 10.2.1.6 & 10.2.2.0, Java 5 & Java 6) ----
> ***** Derby 10.2.1.6, Java 6 *****
> set path=c:\jdk1.6.0_01\bin;%path%
> set classpath=.;db-derby-10.2.1.6-bin\lib\derby.jar
> javac TestBoom.java
> java TestBoom
> 1
> Exception in thread "main" java.sql.SQLException: Invalid transaction state.
> at org.apache.derby.impl.jdbc.SQLExceptionFactory.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.EmbedConnection.close(Unknown Source)
> at TestBoom.main(TestBoom.java:30)
> rd /q/s foo
> ***** Derby 10.2.2.0, Java 6 *****
> set classpath=.;db-derby-10.2.2.0-bin\lib\derby.jar
> javac TestBoom.java
> java TestBoom
> 1
> Exception in thread "main" java.sql.SQLException: Invalid transaction state.
> 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.EmbedConnection.close(Unknown Source)
> at TestBoom.main(TestBoom.java:30)
> Caused by: java.sql.SQLException: Invalid transaction state.
> at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
> at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source)
> ... 7 more
> ***** Derby 10.2.1.6, Java 5 *****
> set path=c:\jdk1.5.0_12\bin;%path%
> set classpath=.;db-derby-10.2.1.6-bin\lib\derby.jar
> javac TestBoom.java
> rd /q/s foo
> java TestBoom
> 1
> Exception in thread "main" java.sql.SQLException: Invalid transaction state.
> at org.apache.derby.impl.jdbc.SQLExceptionFactory.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.EmbedConnection.close(Unknown Source)
> at TestBoom.main(TestBoom.java:30)
> ***** Derby 10.2.2.0, Java 5 *****
> set classpath=.;db-derby-10.2.2.0-bin\lib\derby.jar
> rd /q/s foo
> javac TestBoom.java
> java TestBoom
> 1
> Exception in thread "main" java.sql.SQLException: Invalid transaction state.
> at org.apache.derby.impl.jdbc.SQLExceptionFactory.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.EmbedConnection.close(Unknown Source)
> at TestBoom.main(TestBoom.java:30)
> -------------------------------------------------------------------------------
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.