Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Transakcje to grupy operacji połączonych w jednostki logiczne pracy. Są one używane do kontrolowania i utrzymania spójności i integralności każdej akcji w transakcji, pomimo błędów, które mogą wystąpić w systemie.
Za pomocą sterownika JDBC firmy Microsoft dla programu SQL Server transakcje mogą być lokalne lub rozproszone. Transakcje mogą również używać poziomów izolacji. Aby uzyskać więcej informacji na temat poziomów izolacji obsługiwanych przez sterownik JDBC, zobacz Opis poziomów izolacji.
Aplikacje powinny kontrolować transakcje przy użyciu instrukcji Transact-SQL lub metod dostarczonych przez sterownik JDBC, ale nie obu tych metod. Używanie zarówno instrukcji Transact-SQL, jak i metod API JDBC w tej samej transakcji może prowadzić do problemów, takich jak brak możliwości zatwierdzenia transakcji w oczekiwanym momencie, nieoczekiwane zatwierdzenie lub cofnięcie transakcji oraz rozpoczęcie nowej, czy też pojawienie się wyjątków "Nie można wznowić transakcji".
Korzystanie z transakcji lokalnych
Transakcja jest uważana za lokalną, gdy jest transakcją jednofazową i jest obsługiwana bezpośrednio przez bazę danych. Sterownik JDBC obsługuje transakcje lokalne przy użyciu różnych metod klasy SQLServerConnection , w tym setAutoCommit, commit i rollback. Transakcje lokalne są zwykle zarządzane jawnie przez aplikację lub automatycznie przez serwer aplikacji Java Platform, Enterprise Edition (Java EE).
Poniższy przykład wykonuje transakcję lokalną, która składa się z dwóch oddzielnych instrukcji w try bloku. Instrukcje są wykonywane na tabeli Production.ScrapReason w przykładowej bazie danych AdventureWorks2025 i są zatwierdzane, jeśli nie wystąpią żadne wyjątki. Kod w catch bloku cofa transakcję, jeśli zostanie zgłoszony wyjątek.
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();
}
}
}
Korzystanie z transakcji rozproszonych
Rozproszona transakcja aktualizuje dane na co najmniej dwóch połączonych sieciowo bazach danych przy zachowaniu ważnych właściwości atomowych, spójnych, izolowanych i trwałych (właściwości ACID) przetwarzania transakcji. Obsługa transakcji rozproszonych została dodana do interfejsu API JDBC w specyfikacji opcjonalnego interfejsu API JDBC 2.0. Zarządzanie transakcjami rozproszonymi jest zwykle wykonywane automatycznie przez menedżera transakcji usługi Java Transaction Service (JTS) w środowisku serwera aplikacji Java EE. Jednak sterownik JDBC firmy Microsoft dla programu SQL Server obsługuje transakcje rozproszone w ramach dowolnego menedżera transakcji zgodnego z interfejsem Java Transaction API (JTA).
Sterownik JDBC bezproblemowo integruje się z koordynatorem transakcji rozproszonych firmy Microsoft (MS DTC), aby zapewnić prawdziwą obsługę transakcji rozproszonych z programem SQL Server. MS DTC to rozproszona funkcja transakcji oferowana przez firmę Microsoft dla systemów Microsoft Windows. Usługa MS DTC używa sprawdzonej technologii przetwarzania transakcji od firmy Microsoft do obsługi funkcji XA, takich jak kompletny dwufazowy protokół zatwierdzania rozproszonego i odzyskiwanie transakcji rozproszonych.
Aby uzyskać więcej informacji na temat korzystania z transakcji rozproszonych, zobacz Omówienie transakcji XA.