JDBC - Gestion des exceptions

La gestion des exceptions vous permet de gérer des conditions exceptionnelles telles que les erreurs définies par le programme de manière contrôlée.

Lorsqu'une condition d'exception se produit, une exception est levée. Le terme jeté signifie que l'exécution du programme en cours s'arrête et que le contrôle est redirigé vers la clause catch applicable la plus proche. Si aucune clause catch applicable n'existe, alors l'exécution du programme se termine.

La gestion des exceptions JDBC est très similaire à la gestion des exceptions Java, mais pour JDBC, l'exception la plus courante que vous allez traiter est java.sql.SQLException.

Méthodes SQLException

Une exception SQLException peut se produire à la fois dans le pilote et dans la base de données. Lorsqu'une telle exception se produit, un objet de type SQLException sera passé à la clause catch.

L'objet SQLException transmis a les méthodes suivantes disponibles pour récupérer des informations supplémentaires sur l'exception -

Méthode La description
getErrorCode () Obtient le numéro d'erreur associé à l'exception.
getMessage () Obtient le message d'erreur du pilote JDBC pour une erreur, géré par le pilote ou obtient le numéro d'erreur Oracle et le message pour une erreur de base de données.
getSQLState () Obtient la chaîne XOPEN SQLstate. Pour une erreur de pilote JDBC, aucune information utile n'est renvoyée par cette méthode. Pour une erreur de base de données, le code XOPEN SQLstate à cinq chiffres est renvoyé. Cette méthode peut renvoyer null.
getNextException () Obtient le prochain objet Exception dans la chaîne d'exceptions.
printStackTrace () Imprime l'exception actuelle, ou pouvant être jetée, et son retour vers un flux d'erreur standard.
printStackTrace (PrintStream s) Imprime ce jetable et sa trace dans le flux d'impression que vous spécifiez.
printStackTrace (PrintWriter w) Imprime ce jetable et il est remonté vers le rédacteur d'impression que vous spécifiez.

En utilisant les informations disponibles à partir de l'objet Exception, vous pouvez intercepter une exception et continuer votre programme de manière appropriée. Voici la forme générale d'un bloc try -

try {
   // Your risky code goes between these curly braces!!!
}
catch(Exception ex) {
   // Your exception handling code goes between these 
   // curly braces, similar to the exception clause 
   // in a PL/SQL block.
}
finally {
   // Your must-always-be-executed code goes between these 
   // curly braces. Like closing database connection.
}

Exemple

Étudiez l'exemple de code suivant pour comprendre l'utilisation de try....catch...finally blocs.

//STEP 1. Import required packages
import java.sql.*;

public class JDBCExample {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost/EMP";

   //  Database credentials
   static final String USER = "username";
   static final String PASS = "password";
   
   public static void main(String[] args) {
   Connection conn = null;
   try{
      //STEP 2: Register JDBC driver
      Class.forName("com.mysql.jdbc.Driver");

      //STEP 3: Open a connection
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL,USER,PASS);

      //STEP 4: Execute a query
      System.out.println("Creating statement...");
      Statement stmt = conn.createStatement();
      String sql;
      sql = "SELECT id, first, last, age FROM Employees";
      ResultSet rs = stmt.executeQuery(sql);

      //STEP 5: Extract data from result set
      while(rs.next()){
         //Retrieve by column name
         int id  = rs.getInt("id");
         int age = rs.getInt("age");
         String first = rs.getString("first");
         String last = rs.getString("last");

         //Display values
         System.out.print("ID: " + id);
         System.out.print(", Age: " + age);
         System.out.print(", First: " + first);
         System.out.println(", Last: " + last);
      }
      //STEP 6: Clean-up environment
      rs.close();
      stmt.close();
      conn.close();
   }catch(SQLException se){
      //Handle errors for JDBC
      se.printStackTrace();
   }catch(Exception e){
      //Handle errors for Class.forName
      e.printStackTrace();
   }finally{
      //finally block used to close resources
      try{
         if(conn!=null)
            conn.close();
      }catch(SQLException se){
         se.printStackTrace();
      }//end finally try
   }//end try
   System.out.println("Goodbye!");
}//end main
}//end JDBCExample

Maintenant, compilons l'exemple ci-dessus comme suit -

C:\>javac JDBCExample.java
C:\>

Quand tu cours JDBCExample, il produit le résultat suivant s'il n'y a pas de problème, sinon l'erreur correspondante serait interceptée et un message d'erreur serait affiché -

C:\>java JDBCExample
Connecting to database...
Creating statement...
ID: 100, Age: 18, First: Zara, Last: Ali
ID: 101, Age: 25, First: Mahnaz, Last: Fatma
ID: 102, Age: 30, First: Zaid, Last: Khan
ID: 103, Age: 28, First: Sumit, Last: Mittal
C:\>

Essayez l'exemple ci-dessus en passant un nom de base de données incorrect ou un nom d'utilisateur ou un mot de passe incorrect et vérifiez le résultat.