Transactions

Les transactions sont des groupes d'opérations combinés en unités logiques de travail. Elles sont utilisées pour contrôler et maintenir la cohérence et l'intégrité de chaque action dans une transaction, malgré les erreurs pouvant se produire dans le système.

Avec le pilote JDBC Microsoft SQL Server 2005, les transactions peuvent être locales ou distribuées. Les transactions peuvent également utiliser des niveaux d'isolation. Pour plus d'informations sur les niveaux d'isolation pris en charge par le pilote JDBC, consultez Fonctionnement des niveaux d'isolement.

Utilisation de transactions locales

Une transaction est considérée comme locale lorsqu'il s'agit d'une transaction à phase unique traitée directement par la base de données. Le pilote JDBC prend en charge les transactions locales à l'aide de diverses méthodes de la classe SQLServerConnection, y compris setAutoCommit, commit et rollback. Les transactions locales sont généralement gérées explicitement par l'application ou automatiquement par le serveur d'applications J2EE.

L'exemple suivant effectue une transaction locale comprenant deux instructions distinctes dans le bloc try. Les instructions sont exécutées sur la table Production.ScrapReason dans l'exemple de base de données AdventureWorks SQL Server 2005 et sont validées si aucune exception n'est générée. Le code dans le bloc catch annule la transaction en cas d'exception.

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();
      }
   }
}

Utilisation de transactions distribuées

Une transaction distribuée met à jour les données sur au moins deux bases de données en réseau, tout en conservant les propriétés ACID (Atomicité, Cohérence, Isolation et Durabilité) importantes du traitement de transactions. La prise en charge de transactions distribuées a été ajoutée à l'API de JDBC dans la spécification de l'API facultative de JDBC 2.0. Les transactions distribuées sont généralement gérées automatiquement par le gestionnaire de transactions Java Transaction Service (JTS) dans l'environnement d'un serveur d'applications J2EE. Cependant, le pilote JDBC de Microsoft SQL Server 2005 prend en charge des transactions distribuées dans tout gestionnaire de transactions compatible API de transaction Java (JTA).

Le pilote JDBC est intégré de manière transparente à Microsoft MS DTC (Microsoft Distributed Transaction Coordinator) pour offrir une véritable prise en charge des transactions distribuées avec SQL Server 2000 et SQL Server 2005. MS DTC est une fonctionnalité de transactions distribuées fournie par Microsoft pour les systèmes Microsoft Windows. MS DTC utilise l'excellente technologie Microsoft de traitement des transactions pour prendre en charge les caractéristiques XA, telles que le protocole de validation distribué complet à deux phases et la récupération des transactions distribuées.

Pour plus d'informations sur l'utilisation des transactions distribuées, consultez Transactions XA.

Voir aussi

Autres ressources

Exécution de transactions avec le pilote JDBC