Gestion des transactions | JDBC – Java

Si votre connexion JDBC est en mode de validation automatique (auto-commit), ce qui est le cas par défaut, chaque instruction SQL est validée dans la base de données une fois terminée.

Cela peut convenir aux applications simples, mais il y a trois raisons pour lesquelles vous pouvez désactiver la validation automatique (auto-commit) et gérer vos propres transactions:

  • Pour augmenter les performances.
  • Pour maintenir l’intégrité des processus métier.
  • Pour utiliser des transactions distribuées.
 
Les transactions vous permettent de contrôler si et quand des modifications sont appliquées à la base de données. Il traite une seule instruction SQL ou un groupe d’instructions SQL comme une unité logique, et si une instruction échoue, la transaction entière échoue.

Pour activer la prise en charge des transactions manuelles au lieu du mode de validation automatique(auto-commit) utilisé par défaut par le pilote JDBC, utilisez la méthode setAutoCommit() de l’objet Connection. Si vous passez un booléen FALSE à setAutoCommit(), vous désactivez la validation automatique (auto-commit). Vous pouvez passer un booléen TRUE pour le réactiver.

Par exemple, si vous avez un objet Connection nommé conn, la ligne suivante désactive la validation automatique (auto-commit):

conn.setAutoCommit(false);

 

Commit et Rollback


 
Une fois que vous avez terminé vos modifications et que vous souhaitez valider les modifications, appelez la méthode commit() sur l’objet de connection comme suit :

conn.commit( );

Sinon, pour annuler les mises à jour de la base de données effectuées à l’aide de l’objet connection nommée ‘conn’, utilisez le code suivant :

conn.rollback( );

 
 
L’exemple suivant montre l’utilisation d’un objet commit et rollback:

try{
   //définir la gestion des transactions manuelles
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();
   
   String query = "INSERT INTO Emp VALUES (101, 'Alex')";
   stmt.executeUpdate(query);
   
   //Soumettre une instruction SQL mal formée qui brise le code
   String query = "INSERT IN Emp VAL (102, 'Bob')";
   stmt.executeUpdate(query);
   
   // S'il n'y a pas d'erreur.
   conn.commit();
}
catch(SQLException se){
   // S'il y a une erreur.
   conn.rollback();
}

Dans ce cas, aucune des instructions INSERT ci-dessus ne réussirait et tout serait annulé.
 

Utilisation des points de sauvegarde(Savepoint)

La nouvelle interface JDBC 3.0 Savepoint vous offre un contrôle transactionnel supplémentaire. La plupart des SGBD modernes prennent en charge les points de sauvegarde dans leurs environnements tels que le PL/SQL d’Oracle.

Lorsque vous définissez un point de sauvegarde, vous définissez un point de restauration logique dans une transaction. Si une erreur se produit après un point de sauvegarde, vous pouvez utiliser la méthode rollback() pour annuler toutes les modifications ou uniquement les modifications apportées après le point de sauvegarde.

L’objet Connection a deux nouvelles méthodes qui vous aident à gérer les points de sauvegardes:

  • setSavepoint(String savepointName): définit un nouveau point de sauvegarde. Il renvoie également un objet Savepoint.
  • releaseSavepoint(Savepoint savepointName): supprime un point de sauvegarde. Notez qu’il nécessite un objet Savepoint comme paramètre. Cet objet est généralement un point de sauvegarde généré par la méthode setSavepoint().

Il n’y a qu’une seule rollback(String savepointName), qui annule le travail au point de sauvegarde spécifié.
 
 
L’exemple suivant illustre l’utilisation d’un objet Savepoint :

try{
   //définir la gestion des transactions manuelles
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();
   
   //définir un point de sauvegarde
   Savepoint savepoint = conn.setSavepoint("Savepoint1");
   
   String query = "INSERT INTO Emp VALUES (101, 'Alex')";
   stmt.executeUpdate(query);
   
   //Soumettre une instruction SQL mal formée qui brise le code
   String query = "INSERT IN Emp VAL (102, 'Bob')";
   stmt.executeUpdate(query);
   
   // S'il n'y a pas d'erreur.
   conn.commit();
}
catch(SQLException se){
   // S'il y a une erreur.
   conn.rollback(savepoint);
}

Dans ce cas, aucune des instructions INSERT ci-dessus ne réussirait et tout serait annulé.
 
QCM Java - JDBC

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *