sql >> Base de Datos >  >> RDS >> Mysql

Cómo ejecutar 2 consultas de actualización en una transacción con JDBC

Si desea ejecutar varias declaraciones atómicamente, debe usar una transacción. Una conexión JDBC tiene por defecto el modo de 'compromiso automático', lo que significa que cada instrucción se ejecuta en su propia transacción. Entonces, primero debe deshabilitar el modo de confirmación automática, usando Connection.setAutoCommit(false) .

Con el modo de confirmación automática deshabilitado, las declaraciones ejecutadas se ejecutarán en la transacción actual; si no hay una transacción actual, se iniciará una. Esta transacción puede confirmarse mediante Connection.commit() o revertir usando Connection.rollback() .

Deberá hacer algo como:

try (Connection connection = DriverManager.getConnection(...)) {
    connection.setAutoCommit(false);
    try (Statement stmt = connection.createStatement()) {
        stmt.executeUpdate(<your first update>);
        stmt.executeUpdate(<your second update>);

        connection.commit();
    } catch (SQLException e) {
        connection.rollback();
        throw e;
    }
}

Para obtener más detalles, consulte el capítulo del tutorial de JDBC Uso de transacciones .

Y por favor aprenda acerca de las declaraciones preparadas. La concatenación de valores en una cadena de consulta es mala, porque puede provocar una inyección de código SQL o errores extraños si se olvida de escapar de los valores. Consulte también el capítulo del tutorial de JDBC Uso de declaraciones preparadas .