Connection.setTransactionIsolation(int)
warns:
Note: If this method is called during a transaction, the result is implementation-defined.
This bring up the question: how do you begin a transaction in JDBC? It's clear how to end a transaction, but not how to begin it.
If a Connection
starts inside in a transaction, how are we supposed to invoke Connection.setTransactionIsolation(int)
outside of a transaction to avoid implementation-specific behavior?
Answering my own question:
Connection.setTransactionIsolation()
may be invoked anytime if auto-commit is enabled.Connection.setTransactionIsolation()
may only be invoked before or after a transaction. Invoking it in the middle of a transaction leads to undefined behavior.See JDBC Tutorial by Oracle.
JDBC implicitly demarcates each query/update you perform on the connection with a transaction. You can customize this behavior by calling setAutoCommit(false) to turn off the auto-commit mode and call the commit()/rollback() to indicate the end of a transaction. Pesudo code
try { con.setAutoCommit(false); //1 or more queries or updates con.commit(); } catch(Exception e) { con.rollback(); } finally { con.close(); }
Now, there is a type in the method you have shown. It should be setTransactionIsolation(int level) and is not the api for transaction demarcation. It manages how/when the changes made by one operation become visible to other concurrent operations, the "I" in ACID (http://en.wikipedia.org/wiki/Isolation_(database_systems))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With