Sdílet prostřednictvím


Použití bodů ukládání

Stáhnout ovladač JDBC

Funkce SavePoints nabízí mechanismus pro vrácení částí transakcí. Na SQL Serveru můžete vytvořit savepoint pomocí příkazu SAVE TRANSACTION savepoint_name. Později spustíte příkaz ROLLBACK TRANSACTION savepoint_name, čímž se místo toho vrátíte na konkrétní savepoint, místo abyste se vrátili na začátek transakce.

Body ukládání jsou užitečné v situacích, kdy se chyby pravděpodobně nenastanou. Použití savepointu k vrácení části transakce v případě občasné chyby může být efektivnější než použití každého testu transakce zjistit, zda je aktualizace platná před provedením aktualizace. Aktualizace a vrácení zpět jsou nákladné operace, takže savepointy jsou efektivní pouze v případě, že pravděpodobnost výskytu chyby je nízká a náklady na kontrolu platnosti aktualizace předem jsou relativně vysoké.

Ovladač Microsoft JDBC pro SQL Server podporuje použití bodů obnovení prostřednictvím metody setSavepoint třídy SQLServerConnection. Pomocí metody setSavepoint můžete vytvořit pojmenovaný nebo nepojmenovaný savepoint v rámci aktuální transakce a metoda vrátí SQLServerSavepoint objektu. V rámci transakce lze vytvořit více bodů ukládání. Chcete-li vrátit transakci k danému savepointu, můžete předat objekt SQLServerSavepoint metodě rollback(java.sql.Savepoint).

V následujícím příkladu se při provádění místní transakce sestávající ze dvou samostatných příkazů v try bloku používá savepoint. Příkazy se spouští proti tabulce Production.ScrapReason v ukázkové databázi AdventureWorks2025 a k vrácení druhého příkazu se použije savepoint. Výsledkem je, že do databáze se potvrdí pouze první příkaz.

public static void executeTransaction(Connection con) {
    try(Statement stmt = con.createStatement();) {
        con.setAutoCommit(false);
        stmt.executeUpdate("INSERT INTO Production.ScrapReason(Name) VALUES('Correct width')");
        Savepoint save = con.setSavepoint();
        stmt.executeUpdate("INSERT INTO Production.ScrapReason(Name) VALUES('Wrong width')");
        con.rollback(save);
        con.commit();
        System.out.println("Transaction succeeded.");
    }
    catch (SQLException ex) {
        ex.printStackTrace();
        try {
            System.out.println("Transaction failed.");
            con.rollback();
        }
        catch (SQLException se) {
            se.printStackTrace();
        }
    }
}

Viz také

Provádění transakcí pomocí ovladače JDBC