Gili Gili - 4 days ago 7
Java Question

How to start a transaction in JDBC?

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?

Answer

Answering my own question:

  • JDBC connections start out with auto-commit mode enabled, where each SQL statement is implicitly demarcated with a transaction.
  • Users who wish to execute multiple statements per transaction must turn auto-commit off.
  • Changing the auto-commit mode triggers a commit of the current transaction (if one is active).
  • Connection.setTransactionIsolation() may be invoked anytime if auto-commit is enabled.
  • If auto-commit is disabled, Connection.setTransactionIsolation() may only be invoked before or after a transaction. Invoking it in the middle of a transaction leads to undefined behavior.

Sources:

Comments