db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Knut Anders Hatlen <Knut.Hat...@Sun.COM>
Subject Re: Why derby do not auto commit?
Date Mon, 31 May 2010 12:43:32 GMT
On Mon, 2010-05-31 at 09:46 +0200, Kristian Waagan wrote:
> On 31.05.10 06:03, Hawkx wrote:
> > I found that derby do not auto commit data change on my computer, even I set
> > auto commit to true explicitly. nothing written to database, unless I call
> > commit().
> >    
> 
> Hi,
> 
> I think this is expected behavior, because you don't close the statement.
>  From [1] (* added by me):
> "Auto-commit mode means that when a statement is completed, the method 
> /commit/ is called on that statement automatically. Auto-commit in 
> effect makes every SQL statement a transaction. The commit occurs when 
> the statement completes or the next statement is executed, whichever 
> comes first. *In the case of a statement returning a /ResultSet/, the 
> statement completes when the last row of the /ResultSet/ has been 
> retrieved or the /ResultSet/ has been closed explicitly.*"
> 
> When you call close Connection.close(), Derby will do a rollback because 
> there is an active transaction (if you had auto-commit set to false, an 
> exception would have been thrown).

I was under the impression that closing the connection would implicitly
close the statement, which would then lead to the transaction being
auto-committed and not rolled back.

>From EmbedConnection's javadoc:
http://db.apache.org/derby/javadoc/engine/org/apache/derby/impl/jdbc/EmbedConnection.html#checkForTransactionInProgress%28%29

        Check if the transaction is active so that we cannot close down
        the connection. If auto-commit is on, the transaction is
        committed when the connection is closed, so it is always OK to
        close the connection in that case. Otherwise, throw an exception
        if a transaction is in progress.

-- 
Knut Anders


Mime
View raw message