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 .