Informazioni sulle transazioni
Le transazioni sono gruppi di operazioni combinate in unità di lavoro logiche. Vengono utilizzate per controllare e mantenere la consistenza e l'integrità di ogni azione di una transazione, nonostante gli errori che possono verificarsi nel sistema.
Con il driver Microsoft JDBC per SQL Server, le transazioni possono essere locali o distribuite. Nelle transazioni possono inoltre essere utilizzati livelli di isolamento. Per altre informazioni sui livelli di isolamento supportati dal driver JDBC, vedere Informazioni sui livelli di isolamento.
Le applicazioni devono controllare le transazioni tramite istruzioni Transact-SQL o i metodi forniti dal driver JDBC, ma non entrambi. L'utilizzo simultaneo di istruzioni Transact-SQL e dei metodi dell'API di JDBC nella stessa transazione potrebbe comportare problemi, tra cui l'impossibilità di eseguire il commit di una transazione quando previsto, oppure l'esecuzione del commit o del rollback di una transazione e l'avvio imprevisto di una nuova transazione oppure il verificarsi di eccezioni di tipo "Impossibile riprendere la transazione".
Uso delle transazioni locali
Una transazione viene considerata locale se è a fase singola e viene gestita direttamente dal database. Il driver JDBC supporta le transazioni locali usando vari metodi della classe SQLServerConnection, inclusi setAutoCommit, commit e rollback. Le transazioni locali vengono in genere gestite in modo esplicito dall'applicazione o in modo automatico dal server applicazioni Java Platform, Enterprise Edition (Java EE).
Nell'esempio seguente viene eseguita una transazione locale costituita da due istruzioni separate nel blocco try
. Le istruzioni vengono eseguite sulla tabella Production.ScrapReason nel database di esempio AdventureWorks2022 e, se non vengono generate eccezioni, vengono sottoposte a commit. Il codice nel blocco catch
esegue il rollback della transazione se viene generata un'eccezione.
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();
}
}
}
Uso di transazioni distribuite
Una transazione distribuita aggiorna dati su due o più database in rete conservando al contempo le importanti caratteristiche di atomicità, consistenza, isolamento e durata, ovvero le proprietà ACID, dell'elaborazione delle transazioni. Il supporto delle transazioni distribuite è stato aggiunto all'API JDBC nella specifica JDBC 2.0 Optional API. La gestione delle transazioni distribuite viene in genere eseguita automaticamente dalla gestione transazioni JTS (Java Transaction Service) in un ambiente server applicazioni Java EE. Tuttavia, il driver Microsoft JDBC per SQL Server supporta le transazioni distribuite gestite da qualsiasi gestore delle transazioni conforme con JTA (Java Transaction API).
Il driver JDBC si integra perfettamente con Microsoft Distributed Transaction Coordinator (MS DTC) per fornire un reale supporto delle transazioni distribuite con SQL Server. MS DTC è una funzionalità di gestione delle transazioni distribuite fornita da Microsoft per i sistemi Microsoft Windows. MS DTC si basa sulla collaudata tecnologia di elaborazione delle transazioni di Microsoft per supportare caratteristiche XA quali il protocollo completo di commit distribuito a due fasi e il recupero delle transazioni distribuite.
Per altre informazioni su come usare le transazioni distribuite, vedere Informazioni sulle transazioni XA.