transaction setautocommit false begintransaction begin java jdbc transactions

begintransaction - setautocommit false in java



¿Cómo iniciar una transacción en JDBC? (7)

Connection.setTransactionIsolation(int) advierte:

Nota: Si se llama a este método durante una transacción, el resultado está definido por la implementación.

Esto plantea la pregunta: ¿cómo comienza una transacción en JDBC? Está claro cómo finalizar una transacción, pero no cómo comenzarla.

Si una Connection comienza dentro de una transacción, ¿cómo se supone que invoquemos Connection.setTransactionIsolation(int) fuera de una transacción para evitar el comportamiento específico de la implementación?


En primer lugar, puede ejecutar una transacción manualmente, si desea dejar su conexión en el modo "setAutoCommit (true)", pero aún desea una transacción:

try (Statement statement = conn.createStatement()) { statement.execute("BEGIN"); try { // use statement ... statement.execute("COMMIT"); } catch (SQLException failure) { statement.execute("ROLLBACK"); } }


En realidad, esta página del tutorial de JDBC sería una mejor lectura.
Obtendrá su conexión, establecerá su nivel de aislamiento y luego hará las actualizaciones y cosas, y luego confirmará o retrotraerá.


JDBC delimita implícitamente cada consulta / actualización que realiza en la conexión con una transacción. Puede personalizar este comportamiento llamando a setAutoCommit (false) para desactivar el modo de confirmación automática y llamar a commit () / rollback () para indicar el final de una transacción. Código Pesudo

try { con.setAutoCommit(false); //1 or more queries or updates con.commit(); } catch(Exception e) { con.rollback(); } finally { con.close(); }

Ahora, hay un tipo en el método que ha mostrado. Debe establecerse en la instancia de Transacción (nivel int) y no es la API para la demarcación de transacciones. Gestiona cómo / cuándo los cambios realizados por una operación se vuelven visibles para otras operaciones concurrentes, la "I" en ACID (http://en.wikipedia.org/wiki/Isolation_(database_systems))


Puede usar estos métodos para la transacción:

  1. debe crear el objeto de conexión como con
  2. con.setAutoCommit(false);
  3. tus consultas
  4. si todo es verdadero con.commit();
  5. else con.rollback();

Quizás esto responda a su pregunta: solo puede tener una transacción por conexión. Si la confirmación automática está activada (predeterminado), cada selección, actualización o eliminación se iniciará automáticamente y confirmará (o revertirá) una transacción. Si desactiva el autocommit, inicia una transacción "nueva" (significa que la confirmación o la reversión no se realizarán automáticamente). Después de algunas declaraciones, puede invocar confirmación o reversión, que finaliza la transacción actual y automáticamente inicia una nueva. No puede tener dos transacciones abiertas activamente en una conexión JDBC en JDBC puro.


Respondiendo mi propia pregunta:

  • Las conexiones JDBC comienzan con el modo autocompromiso habilitado, donde cada declaración SQL se demarca implícitamente con una transacción.
  • Los usuarios que deseen ejecutar sentencias múltiples por transacción deben desactivar la confirmación automática .
  • Al cambiar el modo autocomprometido se activa una confirmación de la transacción actual (si hay una activa).
  • Connection.setTransactionIsolation() se puede invocar en cualquier momento si la confirmación automática está habilitada.
  • Si la confirmación automática está deshabilitada, Connection.setTransactionIsolation() solo se puede invocar antes o después de una transacción. Invocarlo en medio de una transacción conduce a un comportamiento indefinido.

Fuentes:


Te sugiero que leas this , verás

Por lo tanto, la primera llamada de setAutoCommit (false) y cada llamada de commit () marcan implícitamente el inicio de una transacción. Las transacciones se pueden deshacer antes de comprometerlas llamando

Editar:

Verifique la documentación oficial en Transacciones JDBC

Cuando se crea una conexión, está en modo autocompromiso. Esto significa que cada declaración de SQL individual se trata como una transacción y se confirma automáticamente justo después de que se ejecuta. (Para ser más precisos, el valor predeterminado es que una declaración SQL se confirme cuando se completa, no cuando se ejecuta. Una declaración se completa cuando se han recuperado todos sus conjuntos de resultados y conteos de actualización. En casi todos los casos, sin embargo , se completa una declaración y, por lo tanto, se confirma, justo después de que se ejecuta).

La forma de permitir que dos o más declaraciones se agrupen en una transacción es deshabilitar el modo de confirmación automática. Esto se demuestra en el siguiente código, donde con es una conexión activa:

con.setAutoCommit (falso);

Fuente: Transacciones JDBC