Si la connexion JDBC est en mode AutoCommit, il est par défaut, chaque instruction SQL est engagée dans la base de données lors de sa fin.
Cela peut être pour des applications simples, mais pour trois raisons, vous voudrez peut-être désactiver la validation automatique et gérer vos propres transactions:
Pour contrôler les transactions et lorsque des modifications sont appliquées à la base de données. Il prend une seule instruction SQL ou un ensemble d'instructions SQL en tant qu'unité logique, et si une instruction échoue, toute la transaction échoue.
Pour activer, au lieu des pilotes JDBC à l'aide de la prise en charge de la transaction manuelle du mode automatique par défaut, utilisez la méthode setAutoCommit () de l'objet de connexion. Si une valeur booléenne est transmise à setAutoCommit (), désactivez le commit automatique. Une valeur booléenne peut être transmise à fidèle pour la rouvrir.
Par exemple, s'il y a un objet nommé CONNACTION CONN
Conn.SetAutoCommit (false);
Soumettre et recaper
Une fois les modifications terminées, vous souhaitez commettre les modifications, puis appeler la méthode Commit (sur l'objet de connexion) comme suit:
Conn.Commit ();
Sinon, les mises à jour de Rollback qui sont faites à la base de données utilisent la connexion nommée Connex, en utilisant le code suivant:
Conn.rollback ();
L'exemple suivant montre comment utiliser un objet de validation et de retour:
essayez {// Supposons un objet de connexion valide conn.setAutoCommit (false); Instruction stmt = conn.createStatement (); 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', 'SINGH')"; STMT.ExecuteUpdate (SQL); // 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 déclaration d'insertion ci-dessus ne réussira et tout sera annulé.
Exemples de validation de transaction et de recul
Ce qui suit est un exemple d'utilisation de la description de la validation de transaction et de Rollback.
Cet exemple de code a été appris en fonction de l'environnement et de l'installation de la base de données dans le chapitre précédent.
Copiez le jdbcexample.java à partir de l'exemple suivant dans le passé, compilez et exécutez, comme indiqué ci-dessous:
// É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 créer des instructions avec // les arguments requis pour RS Exemple. System.out.println ("Création de déclaration ..."); STMT = Conn.CreatEstatement (resultSet.Type_Scroll_insensitive, resultSet.concur_updatable); // Étape 6: Insérez une ligne dans les employés de table System.out.println ("Insertion d'une ligne ...."); String sql = "Insérer dans les employés" + "valeurs (106, 20, 'Rita', 'Tez')"; STMT.ExecuteUpdate (SQL); // Étape 7: Insérez une ligne de plus dans le tableau des employés SQL = "Insérer dans les employés" + "Valeurs (107, 22, 'Sita', 'Singh')"; STMT.ExecuteUpdate (SQL); // Étape 8: Commissez les données ici. System.out.println ("Commiter les données ici ...."); Conn.Commit (); // Étape 9: 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 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 ... Insertion d'une ligne .... Engageant des données ici .... Liste des résultats pour référence .... ID: 100, Âge: 18, premier: Zara, dernier: Aliid: 101, Âge: 25, premier: Mahnaz, Last: Fatmaid: 102, Age: 30, First: Zaid, Last: Khanid: 103, Âge: 28, première: Sumit, Last: Mittalid: 106, Age Tezid: 107, âge: 22, premier: Sita, dernier: Singhgoodbye!