English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

事务 JDBC

Si la conexión JDBC está en modo de transacción automática (por defecto, se realiza la transacción automática), cada instrucción SQL se enviará al banco de datos al completarse. Esto puede ser muy bueno para aplicaciones simples, pero por tres razones, es posible que desee desactivar la transacción automática y gestionar sus propias transacciones.-

  • para mejorar el rendimiento.

  • mantener la integridad del flujo de negocio.

  • usar transacciones distribuidas.

Transacción le permite controlar si y cuándo se aplican los cambios a la base de datos. Considera una única instrucción SQL o un grupo de instrucciones SQL como una unidad lógica, y si cualquier instrucción falla, toda la transacción fallará.

para activar el soporte de transacción manual en lugar del soporte predeterminado del controlador JDBCtransacción automáticapatrón, utilice el objeto de conexiónsetAutoCommit()método. Si se pasa el valor booleano false a setAutoCommit( ), se desactivará la función de transacción automática. Puede pasar el valor booleano true para volver a abrirla.

Por ejemplo, si tiene un objeto Connection llamado conn, escriba el siguiente código para desactivar la transacción automática-

conn.setAutoCommit(false);

Commit y rollback

Después de completar los cambios y desear realizar el commit de los cambios, por favorLlame al método en el objeto de conexióncommit(), como se muestra a continuación:

conn.commit( );

De lo contrario, para deshacer la actualización de la base de datos utilizando el Connection llamado conn, utilice el siguiente código-

conn.rollback( );

El siguiente ejemplo ilustra el uso de los objetos de commit y rollback-

try{
   //Supongamos un objeto de conexión válido conn
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();
   
   String SQL = "INSERT INTO Employees" +
                "VALUES (106, 20, 'Rita', 'Tez')";
   stmt.executeUpdate(SQL);  
   //Enviar una declaración SQL incorrecta de formato, lo que la interrumpirá
   String SQL = "INSERTED IN Employees" +
                "VALUES (107, 22, 'Sita', 'Singh')";
   stmt.executeUpdate(SQL);
   // Si no hay errores.
   conn.commit();
}catch(SQLException se){
   // si hay algún error.
   conn.rollback();
}

En este caso, la sentencia INSERT anterior no tendrá éxito y todo se revertirá.

Para entender mejor, estudiemos "ejemplo de código de commit.

usar Savepoint

nuevo JDBC 3.0 La interfaz Savepoint le proporciona otros controles de transacción. La mayoría de los DBMS modernos soportan puntos de salvaguarda en su entorno, por ejemplo, PL de Oracle. / SQL.

Al establecer un punto de salvaguarda, puede definir un punto de deshacer lógico en la transacción. Si ocurre un error después del punto de salvaguarda, puede usar el método de deshacer para anular todos los cambios, o solo anular los cambios realizados después del punto de salvaguarda.

El objeto Connection tiene dos nuevos métodos que le ayudan a gestionar los puntos de salvaguarda-

  • setSavepoint(String savepointName):Definir un nuevo punto de salvaguarda. También devuelve un objeto Savepoint.

  • releaseSavepoint(Savepoint savepointName):Eliminar el punto de salvaguarda. Tenga en cuenta que necesita un objeto Savepoint como parámetro. Este objeto generalmente se genera mediante el método setSavepoint().

rollback (String savepointName)}El método puede deshacer el trabajo hasta el punto de salvaguarda especificado.

El siguiente ejemplo ilustra el uso del objeto Savepoint-

try{
   //Supongamos un objeto de conexión válido conn
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();
   
   //Establecer un punto de salvaguarda
   Savepoint savepoint1 = conn.setSavepoint("Savepoint1);
   String SQL = "INSERT INTO Employees" +
                "VALUES (106, 20, 'Rita', 'Tez')";
   stmt.executeUpdate(SQL);  
   //Enviar una declaración SQL incorrecta de formato, lo que la interrumpirá
   String SQL = "INSERTED IN Employees" +
                "VALUES (107, 22, 'Sita', 'Tez')";
   stmt.executeUpdate(SQL);
   // Si no hay errores, por favor, realice el cambio.
   conn.commit();
}catch(SQLException se){
   // si hay algún error.
   conn.rollback(savepoint1);
}

En este caso, la sentencia INSERT anterior no tendrá éxito y todo se revertirá.

Para entender mejor, estudiemosPuntos de salvaguarda-Código de ejemplo.