sql >> Databáze >  >> RDS >> Mysql

Jak provést 2 aktualizační dotazy v jedné transakci s JDBC

Pokud chcete provést atomicky více příkazů, musíte použít transakci. Připojení JDBC je ve výchozím nastavení nastaveno na režim „auto-commit“, což znamená, že každý příkaz je proveden ve své vlastní transakci. Nejprve tedy musíte deaktivovat režim automatického potvrzení pomocí Connection.setAutoCommit(false) .

Pokud je režim automatického potvrzení vypnutý, provedené příkazy budou provedeny v aktuální transakci, pokud žádná aktuální transakce neexistuje, bude spuštěna. Tuto transakci pak lze potvrdit pomocí Connection.commit() nebo vrátit zpět pomocí Connection.rollback() .

Budete muset udělat něco jako:

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

Další podrobnosti najdete v kapitole výukového programu JDBC Používání transakcí .

A přečtěte si prosím o připravených prohlášeních. Zřetězení hodnot do řetězce dotazu je špatné, protože může vést k vložení SQL nebo podivným chybám, pokud zapomenete hodnoty escape. Viz také kapitola výukového programu JDBC Použití připravených příkazů .




  1. Proces upgradu krok za krokem na R12.2 Upgrade část -3

  2. Příliš mnoho stolů; MySQL může ve spojení používat pouze 61 tabulek

  3. Jak zachytit a analyzovat události SQL Server

  4. Více malých dotazů vs jeden dlouhý dotaz. Který z nich je efektivnější?