Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Transakce jsou skupiny operací, které se kombinují do logických jednotek práce. Používají se k řízení a udržování konzistence a integrity každé akce v transakci, navzdory chybám, ke kterým může v systému dojít.
S ovladačem Microsoft JDBC pro SQL Server mohou být transakce buď místní, nebo distribuované. Transakce můžou také používat úrovně izolace. Další informace o úrovních izolace podporovaných ovladačem JDBC naleznete v tématu Principy úrovní izolace.
Aplikace by měly řídit transakce buď pomocí Transact-SQL příkazů, nebo metod poskytovaných ovladačem JDBC, ale ne obojí. Použití příkazů Transact-SQL i metod rozhraní JDBC ve stejné transakci může vést k problémům, jako když nelze transakci potvrdit, když je to očekáváno, transakce je neočekávaně potvrzena nebo zrušena, nebo se neočekávaně spustí nová transakce, případně se objeví výjimka "Nepodařilo se obnovit transakci".
Použití místních transakcí
Transakce je považována za místní, pokud se jedná o jednofázovou transakci a zpracovává ji přímo databáze. Ovladač JDBC podporuje místní transakce pomocí různých metod SQLServerConnection třídy, včetně setAutoCommit, commit a rollback. Místní transakce se obvykle spravují explicitně aplikací nebo automaticky aplikačním serverem Java Platform, Enterprise Edition (Java EE).
Následující příklad provádí místní transakci, která se skládá ze dvou samostatných příkazů v try bloku. Příkazy jsou spuštěny v tabulce Production.ScrapReason v ukázkové databázi AdventureWorks2025 a jsou potvrzeny, pokud nejsou vyvolány žádné výjimky. Kód v catch bloku vrátí transakci zpět, pokud je vyvolána výjimka.
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();
}
}
}
Použití distribuovaných transakcí
Distribuovaná transakce aktualizuje data ve dvou nebo více síťových databázích při zachování důležitých atomických, konzistentních, izolovaných a trvalých vlastností zpracování transakcí (ACID). Podpora distribuovaných transakcí byla přidána do rozhraní JDBC API ve specifikaci volitelného rozhraní API JDBC 2.0. Správa distribuovaných transakcí obvykle provádí automaticky správce transakcí JTS (Java Transaction Service) v prostředí aplikačního serveru Java EE. Ovladač Microsoft JDBC pro SQL Server však podporuje distribuované transakce v rámci libovolného správce transakcí kompatibilního s rozhraním Java Transaction API (JTA).
Ovladač JDBC se bezproblémově integruje s Microsoft Distributed Transaction Coordinator (MS DTC) a poskytuje skutečnou distribuovanou podporu transakcí s SQL Serverem. MS DTC je distribuované transakční zařízení poskytované Společností Microsoft pro systémy Microsoft Windows. MS DTC používá ověřenou technologii zpracování transakcí od Microsoftu k podpoře funkcí XA, jako je kompletní dvoufázový distribuovaný zápisový protokol a obnovení distribuovaných transakcí.
Další informace o tom, jak používat distribuované transakce, naleznete v tématu Principy transakcí XA.