Zum Inhalt springen

Kleines Problem mit JDBC


Empfohlene Beiträge

Geschrieben

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 :D ) 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]

Geschrieben

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

Geschrieben

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

Geschrieben
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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...