Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment exécuter 2 requêtes de mise à jour en une seule transaction avec JDBC

Si vous souhaitez exécuter plusieurs instructions de manière atomique, vous devez utiliser une transaction. Une connexion JDBC est par défaut en mode 'auto-commit', ce qui signifie que chaque instruction est exécutée dans sa propre transaction. Vous devez donc d'abord désactiver le mode de validation automatique, en utilisant Connection.setAutoCommit(false) .

Avec le mode de validation automatique désactivé, les instructions exécutées seront exécutées dans la transaction en cours, s'il n'y a pas de transaction en cours, une sera lancée. Cette transaction peut ensuite être validée en utilisant Connection.commit() ou annulé à l'aide de Connection.rollback() .

Vous devrez faire quelque chose comme :

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;
    }
}

Pour plus de détails, consultez le chapitre du didacticiel JDBC Utilisation des transactions .

Et s'il vous plaît en savoir plus sur les déclarations préparées. La concaténation de valeurs dans une chaîne de requête est mauvaise, car elle peut entraîner une injection SQL ou des erreurs étranges si vous oubliez d'échapper les valeurs. Voir aussi le chapitre du didacticiel JDBC Utilisation d'instructions préparées .