JDBC - Transactions

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

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

  • Pour augmenter les performances.

  • Maintenir l'intégrité des processus métier.

  • Pour utiliser des transactions distribuées.

Les transactions vous permettent de contrôler si et quand les 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, toute la transaction échoue.

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

Par exemple, si vous avez un objet Connection nommé conn, codez ce qui suit pour désactiver l'auto-commit -

conn.setAutoCommit(false);

Valider et revenir en arrière

Une fois que vous avez terminé vos modifications et que vous souhaitez valider les modifications, appelez commit() méthode sur l'objet de connexion comme suit -

conn.commit( );

Sinon, pour annuler les mises à jour de la base de données effectuées à l'aide de la connexion nommée conn, utilisez le code suivant -

conn.rollback( );

L'exemple suivant illustre l'utilisation d'un objet commit et rollback -

try{
   //Assume a valid connection object conn
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();
   
   String SQL = "INSERT INTO Employees  " +
                "VALUES (106, 20, 'Rita', 'Tez')";
   stmt.executeUpdate(SQL);  
   //Submit a malformed SQL statement that breaks
   String SQL = "INSERTED IN Employees  " +
                "VALUES (107, 22, 'Sita', 'Singh')";
   stmt.executeUpdate(SQL);
   // If there is no error.
   conn.commit();
}catch(SQLException se){
   // If there is any error.
   conn.rollback();
}

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

Pour une meilleure compréhension, étudions le Commit - Exemple de code .

Utilisation des points de sauvegarde

La nouvelle interface Savepoint JDBC 3.0 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 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 au-delà d'un point d'enregistrement, vous pouvez utiliser la méthode de restauration pour annuler toutes les modifications ou uniquement les modifications effectuées après le point d'enregistrement.

L'objet Connection a deux nouvelles méthodes qui vous aident à gérer les points de sauvegarde -

  • 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 existe une rollback (String savepointName) , qui restaure le travail au point de sauvegarde spécifié.

L'exemple suivant illustre l'utilisation d'un objet Savepoint -

try{
   //Assume a valid connection object conn
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();
   
   //set a Savepoint
   Savepoint savepoint1 = conn.setSavepoint("Savepoint1");
   String SQL = "INSERT INTO Employees " +
                "VALUES (106, 20, 'Rita', 'Tez')";
   stmt.executeUpdate(SQL);  
   //Submit a malformed SQL statement that breaks
   String SQL = "INSERTED IN Employees " +
                "VALUES (107, 22, 'Sita', 'Tez')";
   stmt.executeUpdate(SQL);
   // If there is no error, commit the changes.
   conn.commit();

}catch(SQLException se){
   // If there is any error.
   conn.rollback(savepoint1);
}

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

Pour une meilleure compréhension, étudions le Savepoints - Example Code .