Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como executar 2 consultas de atualização em uma transação com JDBC


Se você deseja executar várias instruções atomicamente, você precisa usar uma transação. Uma conexão JDBC é padronizada para o modo 'auto-commit', o que significa que cada instrução é executada em sua própria transação. Portanto, primeiro você precisa desativar o modo de confirmação automática, usando Connection.setAutoCommit(false) .

Com o modo auto-commit desabilitado, as instruções executadas serão executadas na transação atual, se não houver nenhuma transação atual, uma será iniciada. Essa transação pode ser confirmada usando Connection.commit() ou reverter usando Connection.rollback() .

Você precisará fazer 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 obter mais detalhes, consulte o capítulo do tutorial JDBC Usando transações .

E por favor, aprenda sobre declarações preparadas. Concatenar valores em uma string de consulta é ruim, porque pode levar a injeção de SQL ou erros estranhos se você esquecer de escapar valores. Consulte também o capítulo do tutorial JDBC Usando declarações preparadas .