Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Kleines Problem mit JDBC

Empfohlene Antworten

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]

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

Nee, die 7te Spalte gibt es und wird auch ausgegeben. Ich absolut ratlos, was diese Fehlermeldung zu bedeuten hat :confused:

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

Nein in der Access Tabelle sind 5 Datensätze eingetragen. Nicht viel, aber es reicht zum testen... :P

Ich würde auch mal probieren, das Statement- und Connection-Objekt erst nach der while-Schleife zu schliessen.

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.