JDBC - Ausnahmebehandlung

Mit der Ausnahmebehandlung können Sie außergewöhnliche Bedingungen wie programmdefinierte Fehler kontrolliert behandeln.

Wenn eine Ausnahmebedingung auftritt, wird eine Ausnahme ausgelöst. Der Begriff ausgelöst bedeutet, dass die aktuelle Programmausführung gestoppt wird und die Steuerung zur nächstgelegenen anwendbaren catch-Klausel umgeleitet wird. Wenn keine anwendbare catch-Klausel vorhanden ist, endet die Ausführung des Programms.

Die Behandlung von JDBC-Ausnahmen ist der Behandlung von Java-Ausnahmen sehr ähnlich, aber für JDBC ist die häufigste Ausnahme, mit der Sie sich befassen, die java.sql.SQLException.

SQLException-Methoden

Eine SQLException kann sowohl im Treiber als auch in der Datenbank auftreten. Wenn eine solche Ausnahme auftritt, wird ein Objekt vom Typ SQLException an die catch-Klausel übergeben.

Für das übergebene SQLException-Objekt stehen die folgenden Methoden zum Abrufen zusätzlicher Informationen zur Ausnahme zur Verfügung:

Methode Beschreibung
getErrorCode () Ruft die der Ausnahme zugeordnete Fehlernummer ab.
getMessage () Ruft die Fehlermeldung des JDBC-Treibers für einen vom Treiber behandelten Fehler ab oder ruft die Oracle-Fehlernummer und die Meldung für einen Datenbankfehler ab.
getSQLState () Ruft die XOPEN SQLstate-Zeichenfolge ab. Bei einem JDBC-Treiberfehler werden von dieser Methode keine nützlichen Informationen zurückgegeben. Bei einem Datenbankfehler wird der fünfstellige XOPEN SQLstate-Code zurückgegeben. Diese Methode kann null zurückgeben.
getNextException () Ruft das nächste Ausnahmeobjekt in der Ausnahmekette ab.
printStackTrace () Druckt die aktuelle oder auslösbare Ausnahme und führt sie auf einen Standardfehlerstrom zurück.
printStackTrace (PrintStream s) Druckt dieses Throwable und seine Rückverfolgung auf den von Ihnen angegebenen Druckstrom.
printStackTrace (PrintWriter w) Druckt dieses Wurfobjekt und es wird auf den von Ihnen angegebenen Druckschreiber zurückgeführt.

Mithilfe der im Exception-Objekt verfügbaren Informationen können Sie eine Ausnahme abfangen und Ihr Programm entsprechend fortsetzen. Hier ist die allgemeine Form eines Try-Blocks -

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.
}

Beispiel

Lesen Sie den folgenden Beispielcode, um die Verwendung von zu verstehen try....catch...finally Blöcke.

//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

Lassen Sie uns nun das obige Beispiel wie folgt zusammenstellen:

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

Wenn du rennst JDBCExampleWenn kein Problem vorliegt, wird das folgende Ergebnis angezeigt. Andernfalls wird der entsprechende Fehler abgefangen und eine Fehlermeldung angezeigt.

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:\>

Versuchen Sie das obige Beispiel, indem Sie einen falschen Datenbanknamen oder einen falschen Benutzernamen oder ein falsches Passwort übergeben und das Ergebnis überprüfen.