[Java Avanzado] Explicación detallada de las transacciones de gestión de JDBC

Insertar descripción de la imagen aquí

En las operaciones de bases de datos, las transacciones son un concepto muy importante. Las transacciones pueden garantizar que una serie de operaciones de la base de datos se ejecuten con éxito o se reviertan si no se logra mantener la coherencia e integridad de la base de datos. En Java, podemos usar JDBC para gestionar transacciones. Este artículo presentará en detalle el método y el código de muestra de la gestión de transacciones JDBC y, al mismo tiempo, se explicará en un lenguaje sencillo y claro para principiantes básicos.

¿Qué es la transacción?

En una base de datos, una transacción es un conjunto de operaciones SQL que se tratan como una única unidad de trabajo. Las transacciones tienen las siguientes cuatro propiedades clave, a menudo denominadas propiedades ACID:

  • Atomicidad : las transacciones son atómicas, o todas se ejecutan correctamente o todas fallan y se revierten. Si una de las operaciones falla, toda la transacción falla, sin dejar modificaciones parciales.

  • Consistencia : la base de datos pasa de un estado consistente a otro estado consistente antes y después de que se ejecute una transacción. Esto significa que las transacciones deben seguir las restricciones de integridad de la base de datos, como claves primarias, restricciones únicas, etc.

  • Aislamiento : se pueden ejecutar varias transacciones al mismo tiempo, pero no pueden interferir entre sí. Las modificaciones realizadas por una transacción no son visibles para otras transacciones hasta que se confirman.

  • Durabilidad : una vez que una transacción se envía con éxito, sus resultados se almacenarán permanentemente en la base de datos y no se perderán incluso si el sistema falla.

Gestión de transacciones JDBC

JDBC (Java Database Connectivity) es una API en Java para interactuar con bases de datos. JDBC proporciona una forma de gestionar transacciones de bases de datos en programas Java.

Transacción abierta

Para iniciar una transacción en JDBC, debe realizar los siguientes pasos:

  1. Cree un objeto de conexión de base de datos (Conexión).
  2. Establezca el modo de confirmación automática de la conexión en false, lo que significa que las transacciones no se confirmarán automáticamente.
  3. Ejecutar una serie de operaciones SQL dentro de una transacción.
  4. Finalmente, dependiendo del éxito o fracaso de la operación, usted elige confirmar o revertir la transacción.

El siguiente es un código de muestra que demuestra cómo iniciar una transacción JDBC:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class TransactionExample {
    
    
    public static void main(String[] args) {
    
    
        String jdbcUrl = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";

        try (Connection connection = DriverManager.getConnection(jdbcUrl, username, password)) {
    
    
            // 关闭自动提交,开启事务
            connection.setAutoCommit(false);

            // 执行一系列数据库操作

            // 提交事务
            connection.commit();
        } catch (SQLException e) {
    
    
            e.printStackTrace();
            // 发生异常,回滚事务
            connection.rollback();
        }
    }
}

En el código anterior, desactivamos setAutoCommit(false)el modo de confirmación automática a través del método y luego tryrealizamos una serie de operaciones de base de datos en el bloque. Si ocurre una excepción, catchllamamos rollback()al método en el bloque para revertir la transacción.

Confirmar y revertir transacciones

En JDBC, para confirmar una transacción, puede utilizar commit()el método como se muestra en el ejemplo anterior. Una vez confirmada una transacción, todas las operaciones que contiene pasan a formar parte de la base de datos.

Si algo sale mal durante una transacción, puede utilizar rollback()el método para revertir la transacción, deshacer cualquier cambio no confirmado y restaurar la base de datos al estado en el que se encontraba antes de que comenzara la transacción. En el ejemplo anterior, catchllamamos rollback()al método en el bloque para revertir la transacción.

Establecer nivel de aislamiento de transacciones

En JDBC, puede establecer el nivel de aislamiento de una transacción para controlar el grado en que múltiples transacciones interactúan entre sí. JDBC admite los siguientes cuatro niveles de aislamiento de transacciones, de menor a mayor:

  1. TRANSACTION_NONE : No se admiten transacciones. Cada declaración SQL se confirma automáticamente y no se revertirá.

  2. TRANSACTION_READ_UNCOMMITTED : permite leer cambios de datos no confirmados. Esto significa que una transacción puede ver los datos no confirmados de otra transacción.

  3. TRANSACTION_READ_COMMITTED : solo se permite leer los cambios de datos confirmados. Este es el nivel de aislamiento predeterminado para la mayoría de los sistemas de bases de datos.

  4. TRANSACTION_REPEATABLE_READ : Garantiza que los datos no cambien cuando los mismos datos se leen varias veces en una transacción. Sin embargo, otras transacciones aún pueden insertar datos nuevos.

  5. TRANSACTION_SERIALIZABLE : el nivel de aislamiento más alto, que garantiza un aislamiento completo entre transacciones y no permite el acceso simultáneo.

Para establecer el nivel de aislamiento de transacciones, puede utilizar setTransactionIsolation()el método. Aquí hay un código de muestra:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class TransactionIsolationExample {
    
    
    public static void main(String[] args) {
    
    
        String jdbcUrl = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";

        try (Connection connection = DriverManager.getConnection(jdbcUrl, username, password)) {
    
    
            // 设置事务隔离级别为 TRANSACTION_SERIALIZABLE
            connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);

            // 关闭自动提交,开启事务
            connection.setAutoCommit(false);

            // 执行一系列数据库操作

            // 提交事务
            connection.commit();
        } catch (SQLException e) {
    
    
            e.printStackTrace();
            // 发生异常,回滚事务
            connection.rollback();
        }
    }
}

En el código anterior, configuramos setTransactionIsolation()el nivel de aislamiento de la transacción al Connection.TRANSACTION_SERIALIZABLEnivel más alto de aislamiento a través del método.

Asuntos que necesitan atención

Hay algunas consideraciones importantes al utilizar JDBC para la gestión de transacciones:

  1. Cierre la conexión : asegúrese de cerrar la conexión de la base de datos una vez finalizada la transacción. Puede usar try-with-resources o cerrar la conexión en un bloque finalmente para asegurarse de que los recursos se liberen correctamente.

  2. Manejo de excepciones : capture y maneje SQLException que pueda ocurrir. Revertir la transacción en el bloque catch con el manejo de errores adecuado.

  3. Frecuencia de confirmación : elija cuándo confirmar las transacciones según sea necesario. En lugar de confirmar después de cada declaración SQL, decida el punto de confirmación según las necesidades comerciales.

  4. Nivel de aislamiento : elija un nivel de aislamiento de transacciones adecuado para equilibrar la simultaneidad y la coherencia. Los niveles de aislamiento más altos dan como resultado una degradación del rendimiento, así que intercámbielos según las necesidades de su aplicación.

  5. Pruebas y depuración : las transacciones se prueban y depuran completamente antes de la producción para garantizar que funcionen correctamente.

Conclusión

La gestión de transacciones es una parte integral de las operaciones de la base de datos, lo que garantiza la coherencia e integridad de los datos. A través de JDBC, puede iniciar, confirmar y revertir transacciones fácilmente, y puede controlar el nivel de aislamiento de las transacciones para satisfacer las necesidades de diferentes aplicaciones. Espero que este artículo le ayude a comprender mejor la gestión de transacciones en JDBC.

Información del autor

Autor: Fanyi
CSDN: https://techfanyi.blog.csdn.net
Nuggets: https://juejin.cn/user/4154386571867191

Supongo que te gusta

Origin blog.csdn.net/qq_21484461/article/details/133563151
Recomendado
Clasificación