Delen via


Savepoints gebruiken

JDBC-stuurprogramma downloaden

Savepoints bieden een mechanisme voor het terugdraaien van gedeelten van transacties. In SQL Server kunt u een savepoint maken met behulp van de instructie SAVE TRANSACTION savepoint_name. Later voert u een instructie ROLLBACK TRANSACTION savepoint_name uit om terug te keren naar het opslagpunt in plaats van terug te draaien naar het begin van de transactie.

Savepoints zijn handig in situaties waarin fouten waarschijnlijk niet voorkomen. Het gebruik van een savepoint om een deel van een transactie terug te draaien in het geval van een onregelmatige fout kan efficiƫnter zijn dan elke transactietest om te zien of een update geldig is voordat de update wordt uitgevoerd. Updates en terugdraaien zijn dure bewerkingen, dus savepoints zijn alleen effectief als de kans op het optreden van de fout laag is en de kosten voor het controleren van de geldigheid van een update vooraf relatief hoog zijn.

Het Microsoft JDBC-stuurprogramma voor SQL Server ondersteunt het gebruik van savepoints via de setSavepoint-methode van de klasse SQLServerConnection . Met behulp van de methode setSavepoint kunt u een benoemd of niet-benoemd savepoint maken binnen de huidige transactie en de methode retourneert een SQLServerSavepoint-object . Er kunnen meerdere savepoints worden gemaakt binnen een transactie. Als u een transactie wilt terugdraaien naar een bepaald opslagpunt, kunt u het SQLServerSavepoint-object doorgeven aan de methode terugdraaien (java.sql.Savepoint ).

In het volgende voorbeeld wordt een savepoint gebruikt tijdens het uitvoeren van een lokale transactie die bestaat uit twee afzonderlijke instructies in het try blok. De instructies worden uitgevoerd op de tabel Production.ScrapReason in de voorbeelddatabase AdventureWorks2025 en er wordt een savepoint gebruikt om de tweede instructie terug te draaien. Dit resulteert erin dat alleen de eerste instructie wordt vastgelegd in de database.

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

Zie ook

Transacties uitvoeren met het JDBC-stuurprogramma