Se si desidera eseguire più istruzioni in modo atomico, è necessario utilizzare una transazione. Per impostazione predefinita, una connessione JDBC è in modalità 'auto-commit', il che significa che ogni istruzione viene eseguita nella propria transazione. Quindi devi prima disabilitare la modalità di commit automatico, usando Connection.setAutoCommit(false)
.
Con la modalità di commit automatico disabilitata, le istruzioni eseguite verranno eseguite nella transazione corrente, se non vi è alcuna transazione corrente, ne verrà avviata una. Questa transazione può quindi essere confermata utilizzando Connection.commit()
o ripristinato utilizzando Connection.rollback()
.
Dovrai fare qualcosa come:
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;
}
}
Per maggiori dettagli, vedere il capitolo del tutorial JDBC Utilizzo delle transazioni .
E si prega di conoscere le dichiarazioni preparate. La concatenazione di valori in una stringa di query non è valida, perché può portare a SQL injection o errori strani se si dimentica di eseguire l'escape dei valori. Vedi anche il capitolo del tutorial JDBC Utilizzo delle dichiarazioni preparate .