Grundlegendes zu Transaktionen
Bei Transaktionen handelt es sich um Gruppen von Operationen, die in logische Arbeitseinheiten zusammengefasst sind. Damit wird die Konsistenz und Integrität der einzelnen Aktionen in einer Transaktion gesteuert und gewährleistet, falls im System Fehler auftreten sollten.
Mit dem Microsoft JDBC-Treiber für SQL Server können Transaktionen entweder lokal oder verteilt sein. Transaktionen können auch Isolationsstufen verwenden. Weitere Informationen zu den vom JDBC-Treiber unterstützten Isolationsstufen finden Sie unter Grundlegendes zu Isolationsstufen.
Anwendungen sollten Transaktionen nur entweder mit Transact-SQL-Anweisungen oder den vom JDBC-Treiber bereitgestellten Methoden steuern. Wenn für die gleiche Transaktion sowohl Transact-SQL-Anweisungen als auch JDBC-API-Methoden verwendet werden, führt dies möglicherweise zu Problemen, z. B. kann der Commit einer Transaktion nicht wie erwartet durchgeführt werden, ein unerwarteter Commit oder Rollback der Transaktion wird durchgeführt und eine neue Transaktion gestartet, oder es treten Ausnahmen wie "Fehler beim Wiederaufnehmen der Transaktion" auf.
Verwenden von lokalen Transaktionen
Eine Transaktion wird als lokal angesehen, wenn es sich um eine Einphasentransaktion handelt, die von der Datenbank direkt verarbeitet wird. Der JDBC-Treiber unterstützt lokale Transaktionen über die Methoden der SQLServerConnection-Klasse, wie z. B. setAutoCommit, commit und rollback. Lokale Transaktionen werden normalerweise explizit von der Anwendung oder automatisch vom Anwendungsserver für die Java-Plattform, Enterprise Edition (Java EE) verwaltet.
Im folgenden Beispiel wird eine lokale Transaktion mit zwei getrennten Anweisungen imtry
-Block ausgeführt. Die Anweisungen werden für die Production.ScrapReason-Tabelle in der AdventureWorks2022-Beispieldatenbank ausgeführt. Wenn keine Ausnahmen ausgegeben werden, wird ein Commit ausgeführt. Der Code im catch
-Block führt ein Rollback der Transaktion aus, wenn eine Ausnahme ausgelöst wird.
public static void executeTransaction(Connection con) {
try {
//Switch to manual transaction mode by setting
//autocommit to false. Note that this starts the first
//manual transaction.
con.setAutoCommit(false);
Statement stmt = con.createStatement();
stmt.executeUpdate("INSERT INTO Production.ScrapReason(Name) VALUES('Wrong size')");
stmt.executeUpdate("INSERT INTO Production.ScrapReason(Name) VALUES('Wrong color')");
con.commit(); //This commits the transaction and starts a new one.
stmt.close(); //This turns off the transaction.
System.out.println("Transaction succeeded. Both records were written to the database.");
}
catch (SQLException ex) {
ex.printStackTrace();
try {
System.out.println("Transaction failed.");
con.rollback();
}
catch (SQLException se) {
se.printStackTrace();
}
}
}
Verwenden von verteilten Transaktionen
Eine verteilte Transaktion aktualisiert Daten in mindestens zwei vernetzten Datenbanken, wobei die wichtigen Eigenschaften der Transaktionsverarbeitung (unteilbar, konsistent, isoliert und dauerhaft) gewährleistet werden. Die Unterstützung verteilter Transaktionen wurde in der optionalen API-Spezifikation von JDBC 2.0 in die JDBC-API aufgenommen. Die Verwaltung verteilter Anwendungen wird normalerweise automatisch vom JTS-Transaktions-Manager (Java Transaction Service) in einer Java EE-Anwendungsserverumgebung ausgeführt. Der Microsoft JDBC-Treiber für SQL Server unterstützt jedoch verteilte Transaktionen mit jedem JTA-kompatiblen (Java Transaction API) Transaktions-Manager.
Der JDBC-Treiber ist nahtlos in Microsoft Distributed Transaction Coordinator (MS DTC) integriert, um eine echte Unterstützung verteilter Transaktionen mit SQL Server zu ermöglichen. Bei MS DTC handelt es sich um eine Funktion für verteilte Transaktionen, die von Microsoft für Microsoft Windows-Systeme bereitgestellt wird. MS DTC verwendet bewährte Transaktionsverarbeitungstechnologien von Microsoft, um XA-Funktionen wie das vollständige verteilte Protokoll für Zweiphasencommit und die Wiederherstellung von verteilten Transaktionen zu unterstützen.
Weitere Informationen zur Verwendung von verteilten Transaktionen finden Sie unter Grundlegendes zu XA-Transaktionen.