Hey zusammen.
Ich arbeite in meinem Programm mit einer Oracle-DB.
Das geht auch soweit erstmal sehr gut.
Nun habe ich jedoch folgendes Problem:
Ich stelle eine SQL-Abfrage und bekomme ein Resultset zurück.
Um die Größe zu erfahren damit ich ein Array passend initialisieren kann durchlaufe ich es einmal und zähle mit.
Das mache ich so:
Das klappt auch noch erfolgreich.
Wenn ich das Resultset aber nun mit einer Schleife durchlaufe kriege ich nichts zurück.
Schleife:
Nun nehme ich an, dass der Pointer beim Resultset noch auf der letzten Stelle steht und daher das next() nicht so der Hit ist.
Eine Recherche brachte folgende Möglichkeiten der Lösung:
ResultSet.beforeFirst(); ---> setzt den Pointer vor die erste Stelle auf, also genau das was ich eigentlich suche. Oder
Resultset.absolute(X); ---> setzt den Pointer an der X-Stelle wieder auf. Das geht ja auch wenn ich da einfach 0 oder 1 nehme.
In beiden Fällen kommt jedoch ein ganz unschöner Fehler, nämlich folgender:
java.sql.SQLException: Ungültiger Vorgang bei Nur-Weiterleiten-Ergebnismenge: beforeFirst
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.BaseResultSet.beforeFirst(BaseResultSet.java:62)
Auch wenn ich absolute nehme kommt der gleiche Fehler, nur statt beforeFirst steht da dann absolute.
Ich habe es einmal testweise in die Klasse implementiert wo ich die Funktion brauche und einmal direkt in meine Datenbankklasse.
In beiden Fällen brachte es mich kein Stück weiter.
Wie macht man das?
Was mache ich nun schon wieder falsch?
Danke für eure Hilfe.
Gruß
Ich arbeite in meinem Programm mit einer Oracle-DB.
Das geht auch soweit erstmal sehr gut.
Nun habe ich jedoch folgendes Problem:
Ich stelle eine SQL-Abfrage und bekomme ein Resultset zurück.
Um die Größe zu erfahren damit ich ein Array passend initialisieren kann durchlaufe ich es einmal und zähle mit.
Das mache ich so:
Java:
while (a.getErgebnis().next()) {
Zeilen = Zeilen+1;
}
Das klappt auch noch erfolgreich.
Wenn ich das Resultset aber nun mit einer Schleife durchlaufe kriege ich nichts zurück.
Schleife:
Java:
while (b.getErgebnis().next()) {
Tabelleninhalt[x][0]=b.getErgebnis().getString(1);
Tabelleninhalt[x][1]=b.getErgebnis().getString(2);
Tabelleninhalt[x][2]=b.getErgebnis().getString(3);
Tabelleninhalt[x][3]=b.getErgebnis().getString(4);
Tabelleninhalt[x][4]=b.getErgebnis().getString(5);
Tabelleninhalt[x][5]=b.getErgebnis().getString(6);
Tabelleninhalt[x][6]=b.getErgebnis().getString(7);
Tabelleninhalt[x][7]=b.getErgebnis().getString(8);
x=x+1;
}
Nun nehme ich an, dass der Pointer beim Resultset noch auf der letzten Stelle steht und daher das next() nicht so der Hit ist.
Eine Recherche brachte folgende Möglichkeiten der Lösung:
ResultSet.beforeFirst(); ---> setzt den Pointer vor die erste Stelle auf, also genau das was ich eigentlich suche. Oder
Resultset.absolute(X); ---> setzt den Pointer an der X-Stelle wieder auf. Das geht ja auch wenn ich da einfach 0 oder 1 nehme.
In beiden Fällen kommt jedoch ein ganz unschöner Fehler, nämlich folgender:
java.sql.SQLException: Ungültiger Vorgang bei Nur-Weiterleiten-Ergebnismenge: beforeFirst
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.BaseResultSet.beforeFirst(BaseResultSet.java:62)
Auch wenn ich absolute nehme kommt der gleiche Fehler, nur statt beforeFirst steht da dann absolute.
Ich habe es einmal testweise in die Klasse implementiert wo ich die Funktion brauche und einmal direkt in meine Datenbankklasse.
In beiden Fällen brachte es mich kein Stück weiter.
Wie macht man das?
Was mache ich nun schon wieder falsch?
Danke für eure Hilfe.
Gruß