Mysql
 sql >> Database >  >> RDS >> Mysql

Come eseguire 2 query di aggiornamento in una transazione con JDBC

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 .