JDBC Verbindung zu DB2

Ich bin gerade dabei, ein Servlet zu schreiben, daß Daten aus einer Datenbank ausliest.

Beim Kompilieren werden keine Fehler ausgespuckt, der Application Server schluckt es ebenfalls ohne Probleme, aber es funktioniert nicht.

Der JDBC-Treiber wird geladen. Beim Herstellen der Verbindung wird nicht in die Catch-Anweisung hineingegangen. Scheinbar wird also eine Verbindung hergestellt. Allerdings bleibt das ResultSet leer.

Mir fällt absolut nichts mehr ein. Ich hab schon eine Weile rumprobiert. Wer kann mir einen Tipp geben, woran das liegt?
Wie kann ich allgemein überprüfen, ob eine Verbindung zur Datenbank besteht bzw. bestand?

Danke!
Schnoof

// JDBC-Treiber laden
try {
Class.forName(„COM.ibm.db2.jdbc.net.DB2Driver“);
} catch (ClassNotFoundException exc) {
System.err.println(„Could not load DB2Driver:“ + exc.toString());
System.exit(1);
}

// Verbindung zur Datenbank herstellen
Connection con = null;
try {
String url = „jdbc:db2://server_ip/datenbank“;
con = DriverManager.getConnection(url, user, pass);
} catch (SQLException exc) {
System.err.println(„getonnection failed:“ + exc.toString());
return;
}

// Alle Einträge ausgeben
try {
Statement stmt = con.createStatement();
String query = "SELECT * " +
"FROM Markt " +
„WHERE Tag > DATE(‚2003-08-20‘)“;
ResultSet rs = stmt.executeQuery(query);

(…)

} catch (SQLException exc) {
System.out.println("JDBC/SQL error: " + exc.toString());
return;
}

Hi.

String query = "SELECT * " +
"FROM Markt " +
„WHERE Tag > DATE(‚2003-08-20‘)“;

Ich wuerde jetzt auf den ersten Blick vermuten, dass das Select
schlichtweg keine Ergebnismenge zurueckliefert.
Hast du das fertige Statement mal manuell auf der DB abgesetzt?
(nicht so woertlich nehmen)

Wie kann ich allgemein überprüfen, ob eine Verbindung zur Datenbank :besteht bzw. bestand?

if (con != null) …

Gruss, Patrick

Manchmal bin ich auch zu dusselig! Es lag am falschen Tabellennamen. Jetzt hab ich den Namen korrigiert, und nun wird beim „manuellen Absetzen“ auch etwas zurückgeliefert, aber dafür funktioniert nun das ganze Servlet nicht mehr!

Mal schauen, ob ich das nun lösen kann.

Danke!
Schnoof

Dies ist der Teil, den ich in meiner ersten Frage ausgelassen habe:

while ( rs.next() ) {
content = content + „\n“ + rs.getDate(1) + „“;
for (int i = 2; i " + rs.getDouble(i) + „“;
}
content = content + „\n“;
}

rs.close();
stmt.close();
con.close();

Das ganze steht in der init() des Servlets. Ich kann mir vorstellen, daß ich einen falschen Datentypen aufrufe. In der Tabelle ist die erste Spalte vom Typ DATE und alle anderen vom Typ DECIMAL(5,2). In der service(ServletRequest req, ServletResponse res) werden nur Ausgaben gemacht, was bis zur Korrektur des Tabellennamen auch ganz gut geklappt hat.

Versuch es mal mit rs.getBigDecimal(int).

Eine Aufstellung SQL->Java Datentypen findest du hier unter Punkt 1.1.9.

http://www.joller-voss.ch/ndkjava/notes/jdbc/Java_in…

Gruss, Patrick

Hmmmmmmmmmm, ich habe jetzt das rs.getDouble(i) durch rs.getBigDecimal(i) ersetzt. Das Servlet funktioniert aber immer noch nicht. Ich kriege immer „HTTP 500 - Interner Serverfehler“ zurück.

Woran könnte es denn noch liegen?

Danke!
Schnoof

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ich hab jetzt alles von
ResultSet rs = stmt.executeQuery(query);
bis
rs.close()
auskommentiert. Und prompt gibt das Servlet auch wieder was zurück. Wenn ich lediglich die while-Schleife auskommentiert habe, lief es wieder nicht. Also funktioniert wohl schon die Query nicht?

Danke!
Schnoof

habe, lief es wieder nicht. Also funktioniert wohl schon die
Query nicht?

Hast du sichergestellt das con != null ist bevor du createStatement
aufrufst?
Aber, es wird jetzt langsam unuebersichtlich.
Koenntest du einfach einmal das ganze Servlet posten/schicken?
Oder debugge es zumindest mal mit System.out.println, um die
Stelle einzugrenzen.
Wie sieht der Callstack aus? Kann man daraus was lesen? (Zeilennummer?)

Gruss, Patrick

Du hast Post! :o)