I have noticed some programmer using COMMIT
other using conn.setAutoCommit(true);
to end the transaction or roll back so what are the benefits of using one instead of the other?
Where is the main difference?
conn.setAutoCommit(true);
over
statement.executeQuery(query);
statement.commit();
You should in general use
Connection.commit()
and notConnection.setAutoCommit(true)
to commit a transaction, unless you want to switch from using transaction to the 'transaction per statement' model of autoCommit.That said, calling
Connection.setAutoCommit(true)
while in a transaction will commit the transaction (if the driver is compliant with section 10.1.1 of the JDBC 4.1 spec). But you should really only ever do that if you mean to stay in autoCommit after that, as enabling / disabling autoCommit on a connection may have higher overhead on a connection than simply committing (eg because it needs to switch between transaction managers, do additional checks, etc).You should also use
Connection.commit()
and not use the native SQL commandCOMMIT
. As detailed in the documentation of connection:The thing is that commands like
commit()
andsetAutoCommit(boolean)
may do more work in the back ground, like closingResultSets
and closing or resettingStatements
. Using the SQL commandCOMMIT
will bypass this and potentially bring your driver / connection into an incorrect state.The usage of
conn.setAutoCommit();
applies to the connection and gives you the possibility to execute X queries in a single transaction, or use one single transaction perexecute
As the API describes:
For a simple case:
will be the same as: