Condividi tramite


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 JDBC per Microsoft SQL Server 2005, le transazioni possono essere locali o distribuite. Nelle transazioni possono inoltre essere utilizzati livelli di isolamento. Per ulteriori informazioni sui livelli di isolamento supportati dal driver JDBC, vedere Informazioni sui livelli di isolamento.

Utilizzo di transazioni locali

Una transazione viene considerata locale se è a fase singola e viene gestita direttamente dal database. Il driver JDBC supporta le transazioni locali utilizzando diversi metodi della classe SQLServerConnection, inclusi setAutoCommit, commit e rollback. Le transazioni locali, in genere, vengono gestite esplicitamente dall'applicazione o automaticamente dal server applicazioni J2EE.

Nell'esempio seguente viene eseguita una transazione locale costituita da due istruzioni separate nel blocco try. Le istruzioni vengono eseguite sulla tabella Production.ScrapReason del database di esempio AdventureWorks di SQL Server 2005 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 {
         con.rollback();
         System.out.println("Transaction failed. No records were written to the database.");
      }
      catch (SQLException se) {
         se.printStackTrace();
      }
   }
}

Utilizzo 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 dal gestore delle transazioni JTS (Java Transaction Service) in un ambiente server applicazioni J2EE. Tuttavia, il driver JDBC per Microsoft SQL Server 2005 supporta le transazioni distribuite gestite da qualsiasi gestore delle transazioni compatibile 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 2000 e SQL Server 2005. 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 funzionalità XA quali il protocollo completo di commit distribuito a due fasi e il recupero delle transazioni distribuite.

Per ulteriori informazioni su come utilizzare le transazioni distribuite, vedere Informazioni sulle transazioni XA.

Vedere anche

Altre risorse

Esecuzione di transazioni con il driver JDBC