DB abfrage von Java geht irgendwie nicht
Hm...
- datenbank
0 Jens Holzkämper0 Hm...
0 dedlfix0 MudGuard
Hi Leute,
try {
Statement stmt2=(Statement) con.createStatement();
result = stmt2.executeQuery("SELECT * FROM csp WHERE CustomerID="2132353260800702039"");
// int rs=stmt.executeUpdate(bef);
System.out.println("test1");
System.out.println("result:"+result.getString("CSP"));
stmt.close();
con.close();
} catch (Exception ex) {
System.out.println("Error during access csp" + "\n" + ex.getMessage());
}
Da ist mein Code und gibt mir:
Error during access csp
Before start of result set
Als Fehler meldung :)
Hab jemand eine idee was ich da falsch gemacht habe?
Tach,
try {
Statement stmt2=(Statement) con.createStatement();
result = stmt2.executeQuery("SELECT * FROM csp WHERE CustomerID="2132353260800702039"");
// int rs=stmt.executeUpdate(bef);
System.out.println("test1");
System.out.println("result:"+result.getString("CSP"));
stmt.close();
con.close();} catch (Exception ex) {
System.out.println("Error during access csp" + "\n" + ex.getMessage());}
>
>
> Da ist mein Code und gibt mir:
> Error during access csp
> Before start of result set
>
> Als Fehler meldung :)
> Hab jemand eine idee was ich da falsch gemacht habe?
1\. du fängst zu viele Exceptions auf einmal ab und behandelst sie schlecht, „catch (Exception ex)“ ist häufig problematisch, da nicht weit genug durchdacht.
2\. Du gibst uns keine Information in welcher Zeile der Fehler auftritt und welche Art Exception erzeugt wird, vermutlich da du die Information selber nicht hast, verwende dazu „ex.printStackTrace();“ in deinem Catch-Block.
3\. Das Schließen der Verbindung sollte unbedingt in einen finally-Block.
4\. Du schließt das Objekt stmt in einem Block, der nichts mit diesem Objekt zu tun hat.
5\. Du hast den zweiten Absatz in der [Doku über ResultSet](http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html) übersehen:
„A ResultSet object maintains a cursor pointing to its current row of data. Initially the cursor is positioned before the first row. The next method moves the cursor to the next row, and because it returns false when there are no more rows in the ResultSet object, it can be used in a while loop to iterate through the result set. “
(6.) Da ich vermute, dass die ID nicht dauerhaft statisch im Quelltext stehen wird, solltest du dir gleich [Prepared Statements](http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html) ansehen, um Sicherheitslücken zu vermeiden.
mfg
Woodfighter
super, danke!
ich hatte den code aus einem beispiel im internet
Tach!
Error during access csp
Before start of result set
Dann kipp doch den vom System erzeugten zweiten Teil der Fehlermeldung in eine Suchmaschine deiner Wahl und schau dir das erstbeste Ergebnis an, das da besagt, dass du erstmal den Cursor positionieren musst, weil er noch vor dem ersten Element steht.
dedlfix.
Hi,
result = stmt2.executeQuery("SELECT * FROM csp WHERE CustomerID="2132353260800702039"");
Was für eine Datenbank ist das?
Bei Oracle sind z.B. "" zum Quoten von Spaltennamen. Für Strings wären '' nötig.
} catch (Exception ex) {
System.out.println("Error during access csp" + "\n" + ex.getMessage());
Niemals nur die Message der Exception ausgeben, immer auch die Exception-Klasse.
Gerne auch noch den Stacktrace dazu.
Es bietet sich an, in einer util-Klasse eine static-Methode a la getThrowableAsString(Throwable thr) zu bauen, die einen entsprechenden String zurückgibt (ich hab sowas bei mir im Einsatz, mit zweitem Parameter boolean withStacktrace) ...
cu,
Andreas