sql >> Databasteknik >  >> RDS >> Mysql

Hur man kör 2 uppdateringsfrågor i en transaktion med JDBC

Om du vill utföra flera uttalanden atomiskt måste du använda en transaktion. En JDBC-anslutning har som standard "auto-commit"-läge, vilket innebär att varje sats exekveras i sin egen transaktion. Så du måste först inaktivera auto-commit-läget med Connection.setAutoCommit(false) .

Med auto-commit-läget inaktiverat kommer körda satser att köras i den aktuella transaktionen, om det inte finns någon aktuell transaktion kommer en att startas. Denna transaktion kan sedan antingen utföras med Connection.commit() eller återställs med Connection.rollback() .

Du måste göra något som:

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

För mer information, se JDBC självstudiekapitlet Använda transaktioner .

Och snälla lär dig om förberedda uttalanden. Att sammanfoga värden till en frågesträng är dåligt, eftersom det kan leda till SQL-injektion eller konstiga fel om du glömmer att escape-värden. Se även kapitlet om JDBC självstudier Använda förberedda uttalanden .




  1. Använder MySQL IN-satsen som all inclusive (AND istället för OR)

  2. Parameter Sniffing (eller Spoofing) i SQL Server

  3. försöker ansluta till remote mysql från .asp-sidan

  4. Laravel vältalig grupp enligt senaste skivan