La nouvelle interface JDBC3.0 SavePoint fournit un contrôle de transaction supplémentaire. La plupart des SGBD modernes prennent en charge les points de sauvegarde dans leurs environnements tels que Oracle PL / SQL.
Définissez un point de recul logique dans la transaction lors de la définition d'un point de sauvegarde. Si une erreur se produit lorsqu'un point de sauvegarde est passé, vous pouvez utiliser la méthode de retour pour annuler toutes les modifications ou uniquement des modifications apportées après le point de sauvegarde.
Il existe deux nouvelles méthodes pour les objets de connexion pour aider à gérer les points de sauvegarde:
setsAvepoint (String SavepointName): définit un nouveau SavePoint. Il renvoie également un objet de sauvegarde.
releaseAavePoint (sauvegarde SavepointName): supprimez un point de sauvegarde. Notez qu'il nécessite un objet de sauvegarde en tant que paramètre. Cet objet est généralement généré par la méthode SetSavePoint ().
Il existe une méthode Rollback (String SavePointName) qui revient sur le point de sauvegarde spécifié.
L'exemple suivant montre comment utiliser un objet de sauvegarde:
essayez {// Supposons un objet de connexion valide conn.setAutoCommit (false); Instruction stmt = conn.createStatement (); // Définissez une sauvegarde de sauvegarde Savepoint1 = Conn.SetSavePoint ("SavePoint1"); String sql = "Insérer dans les employés" + "valeurs (106, 20, 'Rita', 'Tez')"; STMT.ExecuteUpdate (SQL); // Soumettez une instruction SQL malformée qui brise String SQL = "INSERTED IN SEMPLYES" + "VALEURS (107, 22, 'SITA', 'TEZ')"; STMT.ExecuteUpdate (SQL); // S'il n'y a pas d'erreur, commettez les modifications. Conn.Commit ();} Catch (SQLEXception Se) {// S'il y a une erreur. Conn.rollback (SavePoint1);} Dans ce cas, aucune déclaration d'insertion ci-dessus ne réussira et tout sera annulé.
Vous trouverez ci-dessous un exemple d'utilisation de SetSavePoint et du didacticiel de transaction pour décrire Rollback.
Cet exemple de code basé sur l'environnement et l'installation de la base de données dans le chapitre précédent a été expliqué.
Copiez l'exemple suivant jdbcexample.java, compilez et exécutez comme suit:
// Étape 1. Importez les packages requis Import Java.sql. *; Classe publique JDBCExample {// JDBC Nom du pilote et URL de la base de données State Final String jdbc_driver = "com.mysql.jdbc.driver"; chaîne finale statique db_url = "jdbc: mysql: // localhost / emp"; // les informations d'identification de la base de données static final string user = "username"; String statique final pass = "mot de passe"; public static void main (String [] args) {connexion conn = null; Déclaration stmt = null; essayez {// étape 2: registre jdbc driver class.forname ("com.mysql.jdbc.driver"); // Étape 3: Ouvrez un système de connexion.out.println ("Connexion à la base de données ..."); Conn = driverManager.getConnection (db_url, utilisateur, pass); // Étape 4: Définissez Auto Commit en tant que faux. Conn.SetAutoCommit (false); // Étape 5: Exécutez une requête pour supprimer des instructions avec // les arguments requis pour RS Exemple. System.out.println ("Création de déclaration ..."); STMT = Conn.CreateStatement (); // Étape 6: Répertoriez désormais tous les enregistrements disponibles. String sql = "SELECT ID, premier, dernier, âge des employés"; ResultSet rs = stmt.ExecuteQuery (SQL); System.out.println ("Liste Set Set pour référence ...."); printrs (RS); // Étape 7: Supprimer les lignes ayant une râpe ID que 104 // mais enregistrer le point avant de le faire. Savepoint Savepoint1 = Conn.SetSavePoint ("ROWS_DELETED_1"); System.out.println ("Suppression de Row ..."); String sql = "Supprimer des employés" + "où id = 110"; STMT.ExecuteUpdate (SQL); // Oups ... nous avons supprimé trop de mauvais employés! // Étape 8: Rollback Les modifications afet Save Point 2. Conn.rollback (Savepoint1); // Étape 9: Supprimer les lignes ayant une râpe ID que 104 // mais enregistrer le point avant de le faire. Savepoint Savepoint2 = Conn.SetSavePoint ("ROWS_DELETED_2"); System.out.println ("Suppression de Row ..."); Sql = "supprimer des employés" + "où id = 95"; STMT.ExecuteUpdate (SQL); // Étape 10: Répertoriez désormais tous les enregistrements disponibles. SQL = "SELECT ID, d'abord, dernier, âge des employés"; rs = stmt.ExecuteQuery (SQL); System.out.println ("Liste Set Set pour référence ..."); printrs (RS); // Étape 10: Environnement de nettoyage Rs.Close (); stmt.close (); conn.close (); } catch (sqlexception se) {// gérer les erreurs pour jdbc se.printStackTrace (); // S'il y a une erreur, puis recule les modifications. System.out.println ("Rolling Back Data ici ..."); essayez {if (conn! = null) Conn.rollback (); } catch (sqlexception se2) {se2.printStackTrace (); } // End Try} catch (exception e) {// Gire les erreurs pour class.forname e.printStackTrace (); } Enfin {// Enfin Block utilisé pour fermer les ressources essayez {if (stmt! = null) stmt.close (); } catch (sqlexception se2) {} // Rien que nous ne pouvons essayer {if (conn! = null) Conn.close (); } catch (sqlexception se) {se.printStackTrace (); } // end End Essy} // end essai system.out.println ("Goodbye!");} // end principal public static void printrs (resultset rs) lance sqlexception {// assurer que nous commençons avec la première ligne Rs.BeforeFirst (); while (Rs.Next ()) {// Récupérer par le nom de la colonne int id = rs.getInt ("id"); int age = Rs.getInt ("âge"); String First = Rs.GetString ("First"); String Last = Rs.GetString ("Last"); // affiche les valeurs System.out.print ("id:" + id); System.out.print (", âge:" + âge); System.out.print (", premier:" + premier); System.out.println (", dernier:" + dernier); } System.out.println (); } // end printrs ()} // fin jdbcexampleMaintenant, compilons l'exemple ci-dessus comme suit:
C:> javac jdbcexample.java
Lors de l'exécution de Jdbcexample, il produit les résultats suivants:
C:> java jdbcexample
Connexion à la base de données ... Création de déclaration ... Liste des résultats pour référence .... ID: 95, âge: 20, premier: Sima, Last: Chugid: 100, âge: 18, premier: Zara, dernier: Aliid: 101, Âge: 25, premier: Mahnaz, dernier: Fatmaid: 102, Age: 30, First: Zaid, Last: Khanid: 103: Âge: 30, First: SUMTIL First: Sima, Last: ChugDeleting row...Deleting row....List result set for reference....ID: 100, Age: 18, First: Zara, Last: AliID: 101, Age: 25, First: Mahnaz, Last: FatmaID: 102, Age: 30, First: Zaid, Last: KhanID: 103, Age: 30, First: Sumit, Last: MittalID: 110, Age: 20, First: Sima, Last: Chuggoodbye!