English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Transaction JDBC

Si la connexion JDBC est en mode de soumission automatique (par défaut, c'est le mode de soumission automatique), chaque instruction SQL est soumise à la base de données à la fin de son exécution. Cela peut être bien pour des applications simples, mais pour les trois raisons suivantes, vous pourriez vouloir désactiver la soumission automatique et gérer vos propres transactions-

  • Pour améliorer les performances.

  • Pour maintenir l'intégrité du processus commercial.

  • Utilisez la transaction distribuée.

La transaction vous permet de contrôler si et quand les modifications sont appliquées à la base de données. Elle considère une seule instruction SQL ou un ensemble d'instructions SQL comme une unité logique, et si toute instruction échoue, l'ensemble de la transaction échouera.

Pour activer le soutien manuel de transaction plutôt que l'utilisation par défaut du pilote JDBCSoumission automatiqueModèle, utilisez l'objet de connexionsetAutoCommit()Méthode. Si vous passez la valeur booléenne false à setAutoCommit( ), vous désactivez la fonction d'auto-soumission. Vous pouvez passer la valeur booléenne true pour la réouvrir.

Par exemple, si vous avez un objet Connection nommé conn, écrivez le code suivant pour désactiver l'auto-soumission-

conn.setAutoCommit(false);

Soumission et annulation

Terminez les modifications et soumettez les modifications après avoir terminé les modifications, veuillezAppeler la méthode sur l'objet de connexioncommit(), como se muestra a continuación:

conn.commit( );

Sinon, para deshacer la actualización de base de datos realizada con el Connection llamado conn, utilice el siguiente código-

conn.rollback( );

Le siguiente ejemplo muestra el uso de los objetos de compromiso y descompromiso-

try{
   //Assumons un objet de connexion valide conn
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();
   
   String SQL = "INSERT INTO Employees" +
                "VALUES (106, 20, 'Rita', 'Tez')";
   stmt.executeUpdate(SQL);  
   //Soumettre une instruction SQL incorrecte qui interrompra
   String SQL = "INSERTED IN Employees" +
                "VALUES (107, 22, 'Sita', 'Singh')";
   stmt.executeUpdate(SQL);
   // S'il n'y a pas d'erreur.
   conn.commit();
}catch(SQLException se){
   // Si une erreur se produit.
   conn.rollback();
}

Dans ce cas, les instructions INSERT ci-dessus ne réussiront pas et tout sera annulé.

Pour mieux comprendre, étudions "Exemple de code de commit.

Utilisez Savepoint

Nouveau JDBC 3.0 L'interface Savepoint vous offre d'autres contrôles transactionnels. La plupart des DBMS modernes supportent les points de sauvegarde dans leur environnement, par exemple PL de Oracle. / SQL.

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

L'objet Connection possède deux nouvelles méthodes pour vous aider à gérer les points de sauvegarde-

  • setSavepoint(String savepointName):Définissez un nouveau point de sauvegarde. Il renvoie également un objet Savepoint.

  • releaseSavepoint(Savepoint savepointName):Supprimez le point de sauvegarde. Veuillez noter qu'il nécessite un objet Savepoint en tant que paramètre. Cet objet est généralement généré par la méthode setSavepoint().

rollback (String savepointName)La méthode peut ramener le travail à un point de sauvegarde spécifié.

L'exemple suivant montre l'utilisation de l'objet Savepoint-

try{
   //Assumons un objet de connexion valide conn
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();
   
   //Définir un point de sauvegarde
   Savepoint savepoint1 = conn.setSavepoint("Savepoint1);
   String SQL = "INSERT INTO Employees" +
                "VALUES (106, 20, 'Rita', 'Tez')";
   stmt.executeUpdate(SQL);  
   //Soumettre une instruction SQL incorrecte qui interrompra
   String SQL = "INSERTED IN Employees" +
                "VALUES (107, 22, 'Sita', 'Tez')";
   stmt.executeUpdate(SQL);
   // S'il n'y a pas d'erreur, veuillez soumettre les modifications.
   conn.commit();
}catch(SQLException se){
   // Si une erreur se produit.
   conn.rollback(savepoint1);
}

Dans ce cas, les instructions INSERT ci-dessus ne réussiront pas et tout sera annulé.

Pour mieux comprendre, étudionsPoints de sauvegarde-Code d'exemple.