This has been a requirement since JDBC 1.0 and at there are no plans to change this given the complexity of the autocommit issue with various vendors.  It is expected the applications that are well behaved will know what mode they are in and invoke the correct methods.

-lance

Daniel John Debrunner (JIRA) wrote:
    [ http://issues.apache.org/jira/browse/DERBY-1654?page=comments#action_12426938 ] 
            
Daniel John Debrunner commented on DERBY-1654:
----------------------------------------------

I think the behaviour mandated by the spec is a useability problem. If I want to write a generic method that needs to commit or rollback  the transaction at the end of its work I have to have extra logic that checks to see if auto-commit is on. I've actually never understood the logic in disallowing these methods (commit & rollback) in auto-commit mode.  Even with auto-commit true there are points in time in the user application where a transaction is active, if the applicaiton wants to commit/rollback  that  work why is a different non-intutive api required (close the Statement and/or all of its ResultSets) rather than the obvious calls conn.commit() & rollback()?

  
Calling Connection.commit() does not throw exception in autocommit mode
-----------------------------------------------------------------------

                Key: DERBY-1654
                URL: http://issues.apache.org/jira/browse/DERBY-1654
            Project: Derby
         Issue Type: Bug
         Components: JDBC
   Affects Versions: 10.1.3.1
           Reporter: Dyre Tjeldvoll
           Priority: Minor
            Fix For: 10.3.0.0

        Attachments: simple.java


The jdbc spec (don't know chapter and verse) states that an attempt to call Connection.commit() when Connection.getAutoCommit() is true, must throw an exception. The attached repro (simple.java) runs fine with Derby (and Postgres), but fails with MySQL:
[EMAIL PROTECTED]/java$ java -cp $CLASSPATH:. simple com.mysql.jdbc.Driver 'jdbc:mysql://localhost/joindb' joinuser joinpass foo4
java.sql.SQLException: Can't call commit when autocommit=true
        at com.mysql.jdbc.Connection.commit(Connection.java:2161)
        at simple.main(simple.java:17)
    

  

Reply via email to