BMAS Geschrieben 27. Juni 2002 Teilen Geschrieben 27. Juni 2002 Ich habe da ein kleines Problem, ich verstehe nicht so ganz was da falsch ist: Ich habe um eine Access Tabelle (Datenbank kann man das ja nicht nennen ) mit Testdaten erstellt, nun will ich diese mittels JDBC auslesen... (später wird das Programm dann auf eine Sybase Datenbank zugreifen) Dafür habe ich eine Klasse geschrieben, welche mir die SQL Abfrage automatisch generiert und per JDBC-ODBC Bridge an Access schickt. Das funktioniert soweit auch ganz gut, die Abfrage wird richtig generiert und ein Ergebnis zurückgeliefert, aber ich bekomme trotzdem eine Fehlermeldung, mit der ich jedoch nichts anfangen kann. Weiss da jemand weiter? Abfrage: SELECT * FROM MList WHERE (Lieferantenname='MNO GmbH' ) Ergebnis: MNO GmbH 12348888 Gastronomie Essen, Getränke A Strasse PLZ Ort 123/987 Fehler: java.sql.SQLException: [Microsoft][ODBC Driver Manager] Fehler in der Funktionsreihenfolge. Oh, ja und hier die Klasse: Die Update und Insert Geschichten funzen noch nicht (bzw. sind noch nicht fertig), erstmal ist nur der Select Befehl lauffähig. package gui; import java.sql.*; import java.util.StringTokenizer; public class Sql { private String wert; private String feld; private String werte[]; private String felder[]; private ResultSet rSet; public Sql() { } public ResultSet getData(String wert) { String select = "SELECT * FROM MList WHERE ("; int i=1; boolean x = false; this.wert = wert; String token; StringTokenizer st = new StringTokenizer(wert, ";"); while(st.hasMoreTokens()) { token = st.nextToken(); if (i == 1 && token.equals("-")==false) { select = select + "Lieferantenname='" + token + "' "; x = true; } if (i == 2 && token.equals("-")==false) { if (x == false) { select = select + "Lieferantennr='" + token + "' "; x = true; } else select = select + "AND Lieferantennr='" + token + "' "; } if (i == 3 && token.equals("-")==false) { if (x == false) { x = true; select = select + "Branche='" + token + "' "; } else select = select + "AND Branche='" + token + "' "; } if (i == 4 && token.equals("-")==false) { if (x == false) select = select + "Bewertung='" + token + "' "; else select = select + "AND Bewertung='" + token + "'"; } i=i+1; } select = select + ")"; System.out.println(select); select(select); return rSet; } private void select(String sqlQuery) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (Exception e) { System.out.println("Fehler bei ODBC-JDBC" + e); return; } ResultSet rSet; Statement stmt; Connection conn; try { String url = "jdbc:odbc:MList"; conn = DriverManager.getConnection(url, "User", "User"); stmt = conn.createStatement(); rSet = stmt.executeQuery(sqlQuery); } catch (Exception e) { System.out.println(e); return; } try { while (rSet.next()) System.out.println( rSet.getString(1) + "\t" + rSet.getString(2) + "\t" + rSet.getString(3) + "\t" + rSet.getString(4) + "\t" + rSet.getString(5) + "\t" + rSet.getString(6) + "\t" + rSet.getString(7) + "\t"); stmt.close(); conn.close(); } catch (Exception e) { System.out.println(e); return; } this.rSet = rSet; } public Sql(String sqlQuery) { } public void delete(String sqlQuery) {} public void setData() {} public void setData(String vorgang, String wert) { String sqlQuery; StringTokenizer st = new StringTokenizer(wert,";"); if (vorgang=="update") { sqlQuery = "UPDATE FROM MList WHERE ("; update(sqlQuery); } if (vorgang=="Update") { sqlQuery = "INSERT INTO MList VALUES ("+st.nextToken()+","+st.nextToken()+","+st.nextToken()+","+st.nextToken()+","+st.nextToken()+","+st.nextToken()+","+st.nextToken()+")"; } if (vorgang=="delete") { String token=st.nextToken(); token=st.nextToken(); sqlQuery="DELETE * FROM MList WHERE ('Lieferantennr="+token+"')"; delete(sqlQuery); } } private void update(String sqlQuery) { } } [/PHP] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 27. Juni 2002 Teilen Geschrieben 27. Juni 2002 Hallo, könnte es sein, dass "rSet.getString(7)" fehlschlägt. Gibt es die 7.te Spalte, oder ist die vielleicht von Typ int? Ich bin mir im Moment nicht sicher ob man nen int mit getString einlesen kann. Gruß Jaraz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
BMAS Geschrieben 27. Juni 2002 Autor Teilen Geschrieben 27. Juni 2002 Nee, die 7te Spalte gibt es und wird auch ausgegeben. Ich absolut ratlos, was diese Fehlermeldung zu bedeuten hat :confused: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 27. Juni 2002 Teilen Geschrieben 27. Juni 2002 Ist das denn der einzige Datensatz? Falls ja, könnte die Fehlermeldung daran liegen, das du das Statement und die Verbindung schließt, obwohl du das Resultset noch nicht geschlossen hast. Gruß Jaraz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
BMAS Geschrieben 27. Juni 2002 Autor Teilen Geschrieben 27. Juni 2002 Nein in der Access Tabelle sind 5 Datensätze eingetragen. Nicht viel, aber es reicht zum testen... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Snowghost Geschrieben 28. Juni 2002 Teilen Geschrieben 28. Juni 2002 Ich würde auch mal probieren, das Statement- und Connection-Objekt erst nach der while-Schleife zu schliessen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 28. Juni 2002 Teilen Geschrieben 28. Juni 2002 Original geschrieben von Snowghost Ich würde auch mal probieren, das Statement- und Connection-Objekt erst nach der while-Schleife zu schliessen. Macht er doch. Gruß Jaraz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.