Fehlerhandling bei JDBC

famco

Aktives Mitglied
Hallo,
ich verwende folgenden Code um auf eine Datenbank zuzugreifen:
Java:
try {           
            Class.forName("net.sourceforge.jtds.jdbc.Driver");          // Treiber laden, Verbindung herstellen
            Connection conn = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost/testdb;instance=test", "sa", "*****");
            System.out.println("connected");
            Statement stmt = conn.createStatement();              
            ResultSet rs = stmt.executeQuery("select * from personen"); // Statement ausführen
            while (rs.next()) {
                System.out.printf("%5d %10s %20s %5s\n", rs.getLong("pnr"), rs.getString("vorname"), rs.getString("name"), rs.getString("knrhex"));
            }
            conn.close();
            System.out.println("closed");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
Im Fehlerfall läuft das ganze wir geplant in den catch-Teil.
Allerdings bietet die Exception nur sehr wenig Möglichkeiten (GetMessage()) den Fehler auszulesen. SQLState ist leider nicht öffentlich und hat auch keinen getter.
Wie komme ich an den Fehlercode ? Wie macht Ihr soetwas ?
Danke
 

Javacode

Mitglied
Hey, ich würde in dem Fall einfach Breakpoints setzen und das ganze im Debug Modus Schritt für Schritt abarbeiten. Dann solltest du auch an deine Fehlerquelle stoßen.

Ansonsten: den StackTrace ausgeben lassen, log4j benutzen :)

Grüße,
Javacode
 

famco

Aktives Mitglied
ich glaube Du hast mich falsch verstanden. Das Programm läuft im Moment ohne Fehler :)

Meine Frage betrifft das generelle Fehlerhandling: ich würde gerne im Programm gezielt auf bestimmte Meldungen reagieren können. Aber leider liefert mir die Exception keinen vernünftigen Code, sondern nur einen String, den ich mit getMessage abholen kann ....
 

Javacode

Mitglied
Aso Ok jetzt verstehe ich.

Kurzer Review zu deinem Code:

Bei so viel arten an Anweisungen in einem try catch Block wirds schwer sein.

1. Du solltest die DB Connection auslagern.
2. Datenbank anfragen am besten auch auslagern
3. Exception Klassen entwickeln (Dies wäre möglich wenn du die Punkte 1-2 befolgst dann hast du nämlich den Fehlerkreis eingegrenzt und kannst dementsprechende Exceptions werfen)
4. im catch Block dann die jeweilige Exception werfen mit: throw new NamederException mit dem (e) + solltest dann auch natürlich die Passende Exception werfen. Bsp. bei SQL Sachen (SQLException e) und so weiter.

Grüße,
Javacode
 

famco

Aktives Mitglied
Ja, das hört sich gut an.
Habe halt Jahrzehnte C und VFP(oop) programmiert und bin jetzt ins JAVA-Wasser geworfen worden :) aber es ist warm und ich bin noch nicht untergegangen ...
Was mich stört ist, das die SQL Exception mir nicht den Fehlercode der Datenbank liefert. Weisst Du etwas darüber? Oder habe ich da etwas ganz falsch verstanden ?

Danke
 
M

maki

Gast
Die SQL Exception message wird dir IME sehr wohl u.a. den Fehlercode der DB enthalten, wenn denn einer vorhanden ist.
Manchmal treten die Fehler nämlich schon vor der DB auf ;)

Die Frage ist doch, was möchtest du mit einem eventuellen Fehlercode machen?
 

JimPanse

Bekanntes Mitglied
noch besser wäre wenn du:

Code:
Connection conn = null;

try {           
            Class.forName("net.sourceforge.jtds.jdbc.Driver");         
             conn = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost/testdb;instance=test", "sa", "*****");
           
             Statement stmt = conn.createStatement();              
            ResultSet rs = stmt.executeQuery("select * from personen"); 
            ...
                // würde nicht aufgerufen werden, wenn ein Fehler eintritt!
               //conn.close();

        } catch (Exception e) {
            System.out.println(e.getMessage());
            throw new DeineExceptionKlasse(e);
        }finally {
             
             if(con != null)try {  conn.close(); } catch (Exception e) {throw new DeineExceptionKlasse(e);}
        }

das schließen der Connection im finally Block auslagerst! Denn dann wird auch im Fehlerfall die Verbindung immer geschlossen! Immomement würde im Fehlerfall bsp. dein SQL-Statement ist nicht valid eine Exception geworfen und deine Verbindung wird nicht geschlossen werden!

Grüße
 

famco

Aktives Mitglied
im Debugger sehe ich das Attribut mit dem Fehlercode durchaus (SQLState). Aber es ist nicht öffentlich und es gibt keine get-Methode um es auszulesen.
Was ich damit machen möchte ist ganz einfach: Im Fehlerfall (z.B. beim Aufbau der Verbindung) dem Anwender die Klartextmeldung anzeigen und zusätzlich den Fehlercode der Datenbank, um einem eventuellen Telefonsupporter einen etwas genaueren Hinweis zu geben, warum(!) der Connect nicht funktioniert hat.
Der MS-SQL-Server liefert da durchaus verschiedene Codes, aber die Meldung ist immer die gleich allgemein gehalten.
 

famco

Aktives Mitglied
oh, mein Fehler. Ich hatte mich auf die Codevervollständigung von NetBeans verlassen und die zeigt nur GetMessage()

Sorry ...

und Danke für die Hilfe.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B SQLite + jdbc + IntelliJ-Consumer = "No suitable driver found..." Datenbankprogrammierung 15
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
N JDBC SQLITE und Cascading Datenbankprogrammierung 2
D Asynchrone Aufrufe mit jdbc Datenbankprogrammierung 5
Edin JDBC Hilfe Datenbankprogrammierung 2
H JDBC Tabellen ausgeben Datenbankprogrammierung 8
Husamoli345 JSF-JDBC Verbindung Crud Datenbankprogrammierung 15
G MySQL JDBC Metadaten auslesen aus .accdb -> Primärschlüssel manchmal erkannt manchmal nicht Datenbankprogrammierung 3
N Java, sql, jar, JDBC-Treiber in Classpath Datenbankprogrammierung 8
O Create Table per JDBC Fehler: ORA-00922 Datenbankprogrammierung 4
J JDBC anschaulich präsentieren Datenbankprogrammierung 2
Thallius MySQL JDBC auf Linux Server zu mySQL DB auf anderem Linux Server wirft Access denied Datenbankprogrammierung 5
ralfb1105 Oracle JDBC Debugging Datenbankprogrammierung 8
Z [JDBC][MYSQL] Access denied Datenbankprogrammierung 7
Thallius MySQL jdbc schließt Verbindung nach vielen Request von selber Datenbankprogrammierung 8
B MySQL JDBC Kommentarfilter Datenbankprogrammierung 4
Aruetiise MySQL Name JDBC Drive finden Datenbankprogrammierung 4
E Sqlite-jdbc Mitliefern Datenbankprogrammierung 4
R jdbc-Zugriff Nicht erlaubt ? Datenbankprogrammierung 16
S probleme mit dem jdbc treiber Datenbankprogrammierung 1
Thallius MySQL Merkwürdiges JDBC Verhalten bei VPN Verbindung. Datenbankprogrammierung 7
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
F MySQL JDBC Problem Datenbankprogrammierung 5
C JDBC und SQLite Datenbank Datenbankprogrammierung 8
looparda SQLite Active JDBC Abstraktion Datenbankprogrammierung 2
J JDBC SQL Statement mit Parameter Datenbankprogrammierung 7
S JDBC PreparedStatement durchiterieren Datenbankprogrammierung 6
J RESTServie + JDBC + No suitable driver found for jdbc Datenbankprogrammierung 4
KaffeeFan JDBC/ODBC-Bridge entfernt Datenbankprogrammierung 4
S sun.jdbc.odbc.JdbcOdbcDriver wird nicht gefunden Datenbankprogrammierung 2
J Fehlende DatenbankView nach einbeziehen von JDBC Datenbankprogrammierung 3
A Mit JDBC auf postgreSQL Datenbank zugreifen Datenbankprogrammierung 5
C PostgreSQL JDBC + PostgreSQL: getLong liefert 0 statt NULL Datenbankprogrammierung 2
flenst111 SQL-Statement Wie konfiguriert man JDBC-Connect.richtig, damit es bei riesigen Tabs keinen Speicherüberlauf gibt? Datenbankprogrammierung 1
M JDBC Tabellen mit Boolean Spalten können nicht erstellt werden. DB Updaten - wie? Datenbankprogrammierung 6
S JDBC mit Postgres DB connecten Datenbankprogrammierung 3
A Eine MySQL Zeile mit JDBC löschen Datenbankprogrammierung 5
D JDBC - Verständnisfrage Datenbankprogrammierung 2
C Tabelle erstellen mit Apache JDBC-Util Datenbankprogrammierung 1
L Conversion-Error bei JDBC Date Literals Datenbankprogrammierung 3
X MySQL DB-verbindung ohne JDBC/ODBC Datenbankprogrammierung 1
F sun.jdbc.odbc.jdbcodbcdriver wird nicht gefuden Datenbankprogrammierung 3
J Keine Verbindung zu MSSQL DB mit JDBC Datenbankprogrammierung 3
U JDBC prepaird Statements Datenbankprogrammierung 4
B MySQL JDBC Zugriff auf entfernt Datenbank, fehlende Rechte Datenbankprogrammierung 2
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
R Transaktionen von mehreren Anwendungen aus - JDBC Datenbankprogrammierung 3
N MySQL com.microsoft.sqlserver.jdbc.SQLServerException: Die Verbindung wurde geschlossen. Datenbankprogrammierung 1
N JDBC: rollback() bei Exception geht nicht!? Datenbankprogrammierung 1
C Dateipfad des jdbc Treibers Datenbankprogrammierung 2
G JDBC Connect nur über SID fehlerfrei möglich Datenbankprogrammierung 2
R Oracle jdbc Zugriff auf Oracle Datenbankprogrammierung 2
T JDBC Fehler Datenbankprogrammierung 2
J JDBC via Singleton Datenbankprogrammierung 12
Z PostgreSQL JDBC mit Postgresql Datenbankprogrammierung 2
B No suitable driver found for jdbc:oracle:thin:@$HOST:$PORT:$SID Datenbankprogrammierung 7
K JDBC via Netzwerk Datenbankprogrammierung 4
B JDBC Connection Fehler Datenbankprogrammierung 8
K JDBC- In Java "stored procedure" erstellen für DB2,OracleSql ... Datenbankprogrammierung 3
J JDBC in Library|"Treiber konnte nicht geladen werden"" Datenbankprogrammierung 2
B JDBC-Connection: Data source name too long Datenbankprogrammierung 3
D JDBC insert mit select abfrage Datenbankprogrammierung 5
A JDBC Prepared Statement Autoincrement Datenbankprogrammierung 3
H JDBC prüfen ob Table existiert Datenbankprogrammierung 3
crashfinger jdbc-connection mit jre7 funktioniert nicht Datenbankprogrammierung 5
0 JDBC Oracle Verbindungsaufbau Datenbankprogrammierung 6
Q Oracle Linux: ClassNotFoundException: oracle.jdbc.driver.OracleDriver Datenbankprogrammierung 6
B JDBC MySQL Statement Datenbankprogrammierung 3
F Oracle Oracle JDBC Anbindung unter Glassfish 3.1.2 Datenbankprogrammierung 3
V PostgreSQL JDBC Treiber fehlt Datenbankprogrammierung 6
Y JDBC - Datenbankabfrage Webserver Datenbankprogrammierung 4
C JDBC Datenbank funktioniert nicht Datenbankprogrammierung 7
C JDBC , JDO oder JPA Datenbankprogrammierung 17
J MySQL Datenbank konfigurieren, JDBC, MySQL oder Hibernate Datenbankprogrammierung 2
P JDBC Verbindung zur DB klappt nicht Datenbankprogrammierung 6
J Java - JDBC Verbindung zur Datenbank nicht möglich Datenbankprogrammierung 10
K JDBC Buch kaufen? Datenbankprogrammierung 3
K Hibernate vs. JDBC Datenbankprogrammierung 4
K JDBC Driver not found Datenbankprogrammierung 10
GianaSisters Per JDBC auf Microsoft SQL 2005 Datenbankprogrammierung 24
S ich brauche tipps für JDBC Datenbankprogrammierung 4
Paristick MSSQL - JDBC Exception beim Registrieren Datenbankprogrammierung 5
S Applet stucks at SQL Connection (jTDS JDBC) Datenbankprogrammierung 15
R MySQL Voraussetzungen für eine erfolgreiche Datenbankanbindung mittels JDBC Datenbankprogrammierung 2
c_sidi90 JDBC Oracle Connection schlägt fehl Datenbankprogrammierung 2
J jdbc-dataSource in Klassen nutzen Datenbankprogrammierung 2
H Rechnen in Datenbanken - JDBC Mittel der Wahl? Datenbankprogrammierung 32
K MySQL JDBC - Access Datenbank - unbekannter TabellenName Datenbankprogrammierung 4
D JDBC Fehler beim laden der nativen Bibliothek db2jcct2 Datenbankprogrammierung 9
J MySQL Verbindung über JDBC scheitert immer Datenbankprogrammierung 2
I Master/Detail Tabellen mit JDBC und Swing Datenbankprogrammierung 10
S MSSQL JDBC "Driver class not found" Datenbankprogrammierung 9
E Datenbankverbindung mit Oracle JDBC und Eclipse Plugin Quantum db Datenbankprogrammierung 2
ruutaiokwu jdbc connection als singleton Datenbankprogrammierung 11
J MySQL Löschen von Rows mit JDBC Datenbankprogrammierung 9
G JDBC Exception Datenbankprogrammierung 3
Screen Ich suche eine SQLDatenbank ohne JDBC-Treiber Datenbankprogrammierung 12
T JDBC und Arrays Datenbankprogrammierung 7
X Oracle JDBC und Joins? Datenbankprogrammierung 7
A No suitable driver found for jdbc:microsoft:sqlserver... Datenbankprogrammierung 9

Ähnliche Java Themen

Neue Themen


Oben