# MySQL Anbindung - Exception Handling



## Andreas1989 (16. Mrz 2009)

Hallo zusammen,
ich bin gerade dran ein Java Programm mit einer MySQL-DB Anbindung zu schreiben.
Nun habe ich fragen zum Exception Handling.
Wenn ich eine Verbindung zur Datenbank aufbaue können folgende Fehler geschehen:
1. Datenbank nicht vorhanden oder IP flasch
2. Kennwort Username falsch
3. MySQL Standard Schma nicht vorhanden

Mein Code:

```
try
    {
      Class.forName("com.mysql.jdbc.Driver");
      this.connection = DriverManager.getConnection("jdbc:mysql://" + IP + ":3306/" + Schma, User, Password);
      this.statement = this.connection.createStatement();
      JOptionPane.showMessageDialog(null, "Verbindung erfolgreich!", "Inventuri", JOptionPane.INFORMATION_MESSAGE);
      return true;
    }
    catch (java.sql.SQLException e)
    {
      JOptionPane.showMessageDialog(null, "Kennwort/Username prüfen", "Inventuri", JOptionPane.INFORMATION_MESSAGE);
      System.out.println(e);
      return false;
    }
    catch (com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException e)
    {
      JOptionPane.showMessageDialog(null, "Standardschma nicht gefunden", "Inventuri", JOptionPane.INFORMATION_MESSAGE);
      System.out.println(e);
      return false;
    }
    catch (com.mysql.jdbc.exceptions.jdbc4.CommunicationsException e)
    {
      JOptionPane.showMessageDialog(null, "Keine Datenbank auf angegebener IP", "Inventuri", JOptionPane.INFORMATION_MESSAGE);
      System.out.println(e);
      return false;
    }
    catch (Exception e)
    {
      JOptionPane.showMessageDialog(null, "Verbindung fehlgeschlagen!", "Inventuri", JOptionPane.INFORMATION_MESSAGE);
      System.out.println(e);
      return false;
    }
```

Jetzt bekomme ich aber folgenden Fehler:


> layout1.java:40:5: exception com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException has already been caught
> catch (com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException e)
> ^
> layout1.java:46:5: exception com.mysql.jdbc.exceptions.jdbc4.CommunicationsException has already been caught
> catch (com.mysql.jdbc.exceptions.jdbc4.CommunicationsException e)



Fange ich etwa alle SQL Exceptions mit  catch (java.sql.SQLException e) ab?? Wenn das so ist, kann mir dann jemand sagen wie ich genauer unterscheiden kann?

Danke

Gruß
 Andreas


----------



## SlaterB (16. Mrz 2009)

du musst auf die Reihenfolge achten, catch SQLException sollte erst ganz am Ende stehen, natürlich noch vor catch Exception

erst die speziellen, dann die allgemeinen Exceptions abfangen

----

allgemein:
4x fast gleich
> JOptionPane.showMessageDialog(null, "Keine Datenbank auf angegebener IP", "Inventuri", JOptionPane.INFORMATION_MESSAGE);      
> System.out.println(e);

ist nicht so schön, schreibe lieber nur
showInfo("Keine Datenbank auf angegebener IP");

und der Rest ist in einer Hilfsmethode showInfo(String info) versteckt


----------



## Andreas1989 (16. Mrz 2009)

Okay,
vielen Dank für die Erklärung und den Verbesserungsvorschlag. Macht aufjeden fall Sinn.

Gruß
 Andreas


----------

