jdbc exception handling how handle sql exceptions
le meilleur convertisseur youtube en mp3 en ligne
Ce didacticiel sur la gestion des exceptions JDBC explique les moyens de gérer les exceptions SQL à l'aide d'exemples de programmation:
dans le Gestion des transactions JDBC tutoriel du Série de didacticiels JDBC , nous avons appris les types de transaction JDBC, les types de données, les méthodes de gestion des transactions et comment les utiliser dans les programmes Java.
Dans ce didacticiel, nous allons découvrir les exceptions dans JDBC et comment les gérer. Dans JDBC, si l'exception s'est produite en raison de la connectivité de la base de données ou de tout élément lié à la base de données, elle sera sous SQLException. Ici, nous verrons plus d'informations sur SQLExceptions.
Préparons-nous à découvrir les exceptions dans JDBC.
Ce que vous apprendrez:
Gestion des exceptions JDBC
Des exceptions se produisent lorsqu'il y a une erreur ou un avertissement dans l'exécution du programme. Lorsqu'une exception se produit, le déroulement normal du programme sera perturbé et le programme se terminera anormalement. La bonne chose à propos de l'exception est que nous pouvons la gérer en utilisant un bloc try-catch ou un mot clé throws. Toutes les exceptions et erreurs sont les sous-classes de la classe Throwable. La classe Throwable est la classe de base de toutes les exceptions et erreurs.
Mots clés de gestion des exceptions Java
Il existe cinq mots-clés dans la gestion des exceptions Java. Ils sont les suivants:
- Essayer: Les instructions de programme qui peuvent déclencher l'exception doivent être conservées dans un bloc try.
- Capture: Si une exception se produit dans le bloc try, elle sera levée. Nous pouvons attraper cette exception en utilisant le bloc Catch et la gérer dans le code.
- Lancer: Les exceptions générées par le système sont automatiquement levées par JVM. Pour lever manuellement les exceptions, nous devons utiliser un mot-clé throw.
- Jette: Toute exception levée par une méthode doit être spécifiée par une clause throws.
- Pour terminer: Toutes les instructions de programme qui doivent être exécutées après le bloc try doivent être conservées dans le bloc finally.
>> Cliquez Ici pour plus d'informations sur les exceptions en Java.
SQLException
Dans JDBC, nous pouvons obtenir des exceptions lorsque nous exécutons ou créons la requête. Les exceptions qui se produisent en raison de la base de données ou du pilote relèvent de l'exception SQL. En utilisant la gestion des exceptions, nous pouvons gérer l'exception SQL comme nous traitons l'exception normale.
SQLException est disponible dans le package java.sql. Il étend la classe Exception, ce qui signifie que nous pouvons également utiliser les méthodes disponibles dans la classe Exception de la classe SQLException.
Exemple d'exception SQL
Une erreur de syntaxe dans l'instruction SQL peut entraîner une exception SQL. Lorsqu'une telle exception se produit, un objet de la classe SQLException est passé au bloc catch. En utilisant les informations de l'objet SQLException, nous pouvons intercepter cette exception et continuer le programme.
L'objet SQLException a les méthodes suivantes:
Nom de la méthode | La description |
---|---|
getErrorCode () | Il renvoie le numéro d'erreur |
getMessage () | Il renvoie le message d'erreur |
getSQLState () | Il renvoie le SQLState de l'objet SQLException. Il peut également renvoyer null. Pour l'erreur de base de données, il renverra l'état XOPEN SQL |
getNextException () | Il renvoie l'exception suivante dans la chaîne d'exceptions. |
printStackTrace () | Il imprime l'exception actuelle et sa trace dans un flux d'erreur standard |
setNextException (SQLEXception ex) | Il est utilisé pour ajouter une autre exception SQL dans la chaîne |
Comment gérer les exceptions
L'exception liée à JDBC lève principalement SQLException, et c'est une exception vérifiée, nous devons donc l'attraper ou la lancer. Toute la logique métier et les données de validation doivent être effectuées dans un bloc Try, si une exception se produit dans le bloc, nous devons l'attraper et la gérer dans le bloc Catch. En fonction du type d'exception, nous devons effectuer les annulations ou valider dans le bloc Catch.
Catégories de SQLException
Parfois, le pilote JDBC peut lever la sous-classe de SQLException qui représente un état SQL commun ou un état d'erreur commun qui n'est spécifiquement pas associé à une valeur de classe d'état SQL particulière. Cela vous permettra de gérer l'exception d'une manière plus spécifique, et nous pouvons la gérer dans notre code. Ces types d'exceptions relèvent des sous-classes de l'une des exceptions suivantes:
- SQLNonTransientException: Ce type d'exception sera levé lorsqu'une instance où une nouvelle tentative de la même opération échouerait à moins que la cause de l'exception SQLException n'ait été corrigée.
- SQLTransientException: Ce type d'exception sera levé lorsqu'une opération ayant échoué précédemment est capable de réussir lorsque nous avons réessayé l'opération sans aucune modification / intervention.
- SQLRecoverableException: Ce type d'exception sera levé lorsqu'une opération ayant échoué précédemment peut réussir lorsque nous avons réessayé l'opération avec une modification / intervention de l'application. Pendant ce temps, la connexion actuelle doit être fermée et la nouvelle connexion doit être ouverte.
Autres sous-classes de SQLException:
Voici les sous-classes de SQLException:
- BatchUpdateException: Ce type d'exception sera levé si une erreur s'est produite lors de l'opération de mise à jour par lots. Outre les informations SQLException, BatchUpdateException fournit le statut des instructions qui ont été exécutées / mises à jour avant que l'erreur ne se produise.
- SQLClientInfoException: Ce type d'exception sera levé si une ou plusieurs propriétés d'information n'ont pas pu être définies sur une connexion. Outre les informations SQLException, SQLClientInfoException une liste de propriétés d'informations client qui n'ont pas été définies.
Dans ce didacticiel, nous verrons SQLException normale, puis nous verrons BatchUpdateException. Vous pouvez exercer les sous-classes restantes de SQLException sur votre système.
Dans l'exemple suivant, nous expliquerons comment gérer l'exception.
Tous les programmes sont écrits en Java, dans ce tutoriel. Nous avons utilisé la version Java 8 et Oracle DB.
>> Cliquez Ici pour télécharger le logiciel Oracle
>> Cliquez Ici pour télécharger la version Java 8
Il a le processus d'installation Java étape par étape.
Exemple de programme d'exceptions
package com.STH.JDBC; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Exception_Example { public static void main(String[] args) throws ClassNotFoundException { // TODO Auto-generated method stub String update_query = 'update employee_details set email='martinL@gmail.com' where empNum1 = 10011'; //Update query to set the email id for the employee whose empNUM is 10011 Class.forName('oracle.jdbc.driver.OracleDriver'); try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); ResultSet rs1 =null; statemnt1 = conn.createStatement(); System.out.println('Executing Update query using executeUpdate method'); int return_rows = statemnt1.executeUpdate(update_query); System.out.println('No. of Affected Rows = '+ return_rows); } catch(SQLException sqe) { System.out.println('Error Code = ' + sqe.getErrorCode()); System.out.println('SQL state = ' + sqe.getSQLState()); System.out.println('Message = ' + sqe.getMessage()); System.out.println('printTrace /n'); sqe.printStackTrace(); } } }
Production:
Explication:
#1) Création d'une requête de sélection dont le nom de colonne ne figure pas dans la table EMPLOYEE_DETAILS.
Créer une requête:
String update_query = 'update employee_details set email='martinL@gmail.com' where empNum1 = 10011';
#deux) Création d'une connexion, d'une instruction et exécution de la requête de sélection dans le bloc try.
# 3) Dans le bloc Catch, nous avons géré l'exception.
# 4) Nous affichons l'erreur de l'exception en utilisant la méthode getError (), SQLState de l'exception en utilisant la méthode getSQLState (), le message de l'exception en utilisant la méthode getMessage () et imprimons la trace de pile de l'exception en utilisant la méthode printStackTrace.
Exemple de BatchUpdateException
Nous avons créé une nouvelle table pour illustrer l'exemple BatchUpdateException. Le nom de la table est EMPLOYEE. Il comporte 3 colonnes.
Elles sont:
- ID qui est une clé primaire
- NOM DE FAMILLE
- PRÉNOM
Syntaxe pour créer une table dans ORACLE DB:
CREATE TABLE EMPLOYEE ( ID int NOT NULL PRIMARY KEY, LastName varchar(255), FirstName varchar(255) );
Programme Java:
package com.STH.JDBC; import java.sql.BatchUpdateException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Statement_ExecuteBatch_Example { public static void main(String[] args) throws ClassNotFoundException, SQLException { //Inserting the following 3 rows in EMPLOYEE_DETAILS Table String insert_query1 = 'insert into employee values(101,'Patterson','Tony')'; String insert_query2 = 'insert into employee values(102,'Potter','Harry')'; String insert_query3 = 'insert into employee values(102,'Wong','Jane')'; Class.forName('oracle.jdbc.driver.OracleDriver'); //Opening Oracle DB Connection try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); //Adding the 3 insert queries into the Statement object using addBatch method statemnt1.addBatch(insert_query1); statemnt1.addBatch(insert_query2); statemnt1.addBatch(insert_query3); int No_of_Afffected_Rows[]= statemnt1.executeBatch(); //After inserting the data System.out.println('No of rows affected = ' +No_of_Afffected_Rows.length); } //Catching the BatchUpdateException catch(BatchUpdateException be) { //getting the updated rows status before the exception has occurred int[] updateCount = be.getUpdateCounts(); int count = 1; for (int i : updateCount) { //Using for loop, printing the statement which has been successfully executed if (i == Statement.EXECUTE_FAILED) { System.out.println('Error on Statement ' + count +': Execution failed'); } else { System.out.println('Statement ' + count +': is executed'); } count++; //Incrementing the count to display the next updated row no. } //System.out.println('Error on statemet '+be.getUpdateCounts()); be.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } }
PRODUCTION:
Explication:
Ce que nous avons fait dans le programme ci-dessus, c'est que nous avons créé 3 requêtes INSERT et l'avons ajouté dans un lot et exécuté. Le 3rdla requête a la même valeur d'identifiant de 1strequête puisque la colonne ID est une clé primaire de la table EMPLOYEE, le programme a levé une exception BatchUpdateException.
- Création des 3 requêtes d'insertion pour l'insérer dans la table EMPLOYEE. La première et la troisième requête ont la même valeur d'ID. La colonne id est une clé primaire de la table EMPLOYEE.
- Créer un objet instruction et y ajouter ces 3 requêtes à l'aide de la méthode addBatch (). Puis appelé la méthode executeBatch () pour l'exécuter.
- Puisque la première et la troisième requête ont la même valeur d'ID. Lorsque le executeBatch () a essayé d'exécuter la troisième requête, il lèvera BatchUpdateException.
- Dans le bloc catch BatchUpdateException, nous avons appelé la méthode getUpdateCounts () pour obtenir le statut de la ligne mise à jour.
- En utilisant la boucle for, nous vérifions un par un si le statut de l'instruction particulière a échoué ou non. Si l'instruction particulière n'échoue pas, elle imprimera le numéro de ligne de l'instruction.
- Après cela, il imprimera le printStackTrace de BatchUpdateException.
- Dans l'exemple ci-dessus, puisque l'exception s'est produite en raison de la troisième instruction, les instructions 1 et 2 ont été imprimées. Ensuite, la trace complète de l'exception a été imprimée dans la console de sortie.
Points à retenir:
- L'exception qui s'est produite en raison de la base de données sera sous SQLException.
- Les exceptions en Java peuvent être gérées à l'aide du bloc try: catch.
- SQLException est l'exception vérifiée afin que nous puissions la gérer en utilisant le bloc try: catch.
- Nous avons quelques sous-classes de SQLException. Il s'agit de SQLNonTransientException, SQLTransientException, SQLRecoverableException, BatchUpdateException et SQLClientInfoException.
Questions fréquemment posées
Q # 1) Qu'est-ce qu'une exception SQL?
Répondre: Une exception s'est produite car la base de données est connue sous le nom d'exception SQL. Une exception qui fournit des informations sur la base de données est également appelée exception SQL. Nous avons une classe SQLException en Java, qui est utilisée pour fournir des informations sur l'exception. Il a les méthodes suivantes:
- getErrorCode ()
- getMessage ()
- getSQLState ()
- printStackTrace ()
- getNextException ()
Q # 2) Comment gérer l'exception en SQL?
Répondre: Écrivez la logique métier dans le bloc try. Si une erreur ou une exception s'est produite, interceptez-la dans le bloc Catch et écrivez le message approprié pour trouver facilement l'exception.
Le bloc Try – Catch est utilisé pour gérer l'exception.
Q # 3) Quand SQLException peut se produire en Java?
Répondre: SQLException se produit s'il y a une erreur dans l'accès à la base de données ou d'autres erreurs liées à la base de données. Lorsque SQLException se produit, un objet de type SQLException est passé à la clause catch. Nous pouvons le gérer dans le bloc Catch.
Q # 4) Qu'est-ce que la chaîne d'exceptions en Java et à quoi sert-elle?
Répondre: Une exception qui provoque une autre exception est appelée Exception Chain ou Chained Exception. Dans la plupart des cas, nous devons enchaîner l'exception de manière à relier une exception à une autre exception, cela rendra les journaux clairs et faciles à suivre. Cela sera utile pour le programmeur dans le processus de débogage.
Par exemple:
Considérez une méthode qui lève une exception arithmétique en raison d'une division par zéro. La cause réelle de l'exception est une erreur d'E / S, ce qui rend le diviseur nul. La méthode lèvera uniquement une exception arithmétique au programmeur. Pour que l'appelant / programmeur ne connaisse pas la cause réelle de l'exception. Dans ce type de situation, nous pouvons utiliser une exception chaînée.
Conclusion
Les exceptions peuvent être gérées à l'aide d'un bloc try-catch ou en le lançant. Les exceptions se sont produites en raison de la base de données appelée SQLException. Nous avons une classe distincte pour SQLException qui est une sous-classe d'Exception. Nous avons les méthodes pour connaître l'exception SQL de manière plus spécifique.
Les méthodes sont getMessage (), getErrorCode (), getSQLState (), getNextException et printStackTace. getNextException sera utilisé dans le cas Exception Chained.
lecture recommandée
- Exceptions Java et gestion des exceptions avec des exemples
- Les 10 principales exceptions au sélénium et comment les gérer (code exact)
- Guide complet de la gestion des exceptions PL SQL avec des exemples
- Tutoriel sur la gestion des exceptions C # avec des exemples de code
- Gestion des exceptions en C ++
- Comment gérer l'exception dans les scripts SoapUI Groovy - Tutoriel SoapUI # 11
- Tutoriel PL SQL pour les débutants avec des exemples | Qu'est-ce que PL / SQL
- Package PL SQL: Tutoriel Oracle PL / SQL Package avec des exemples