Resultset.last() Problem

RelaX

Aktives Mitglied
Hallo alle miteinander.

Ich hab mal wieder ein dickes fettes Problem und bin fast schon am ausflippen.

Java:
CallableStatement cStmt = MySQL.connection.prepareCall("CALL ladeAromaBildListe(?,?,?,?)");

Die ? werden natürlich ausgefüllt, sind hier aber der Übersichthalber fehlend.

ResultSet rs = cStmt.executeQuery();
ResultSetMetaData md = rs.getMetaData();
rs.last(); <--- Hier kommt der Fehler!!
int groesse = rs.getRow();
System.out.println("Größe: " +groesse);
rs.beforeFirst();

Wenn die Abfrage kein Ergebnis liefert bzw. die Datenbank keine einträge findet, dann kommt dieser Fehler:

Exception in thread "Thread-2" java.lang.NullPointerException
at com.mysql.jdbc.ResultSetImpl.last(ResultSetImpl.java:6773)
at SQL.MySQLAromaBild.ladeAromaBildListe(MySQLAromaBild.java:105)
at SQL.MySQLAromaBild.ladeAromaBilder(MySQLAromaBild.java:36)
at GUIBilderSidebar.run(GUIBilderSidebar.java:87)
at java.lang.Thread.run(Unknown Source)

Das Gute daran ist eben dass wenn es Datensätze gibt das ganze soweit funktioniert. Jetzt würde ich ja an mir zweifeln aber in einer anderen Klasse funktioniert das auch OHNE das ein Ergebnis vorhanden ist bzw. Datensätze gefunden wurden.

Ich bin am verzweifeln und bitte um Hilfe.
 
[DUKE]
Moves the cursor to the last row in this ResultSet object.[/DUKE]

Wenn dein Resultset keine Einträge hat, dann wirds wohl schwer mit Cursor moven ^^

Wirste wohl prüfen müssen, ob was drinn is.

Gruß Vanny
 
Vanny danke dir für die Antwort.

Ja das versuch ich gerade. Mich stört es eben wirklich nur richtig extrem weil es ja in einem anderen Thread funktioniert. Genau auf die selbe Art und Weise.

wenn ich nun rs.next() aufrufe dann bekomme ich auch eine exception.

Resultset is from Update. No Data.

Eine Idee woran das liegen könnte?
 
naja, wenn rs.last() ne nullpointer schmeisst, kannste ja auf null prüfen oder missversteh ich da was ?
 
ja eigentlich.. das problem ist jetzt aber das ich eine Exception nur alleine schon bei rs.next() bekomme.

Also ich hab jetzt wirklich schon viel Programmiert aber das mit dem Resultset nervt mich so langsam aber sicher.

if(rs == null) {

}

funktioniert auch nicht. Und wenn ich es anspreche bekomm ich eine Exception.

Is From Update NO Data..
 
Du bekommst also beim last() ne NPE und bei next() noData-Error (richtig?)
geht nicht einfach
Code:
if(rs.last()!=null)
?
 
Habe selbst noch nie mit CallableStatement gearbeitet, aber
Code:
Resultset is from [B]Update[/B]. No Data.
sieht danach aus, als wenn die Stored Procedure gar kein ResultSet liefert, sondern einen int (Anzahl upgedateter Rows). Wäre das denkbar? Dann müsstest Du statt execute() executeUpdate() benutzen.
 
nillehammer. Hab nachgeschaut. Hab keinen Tippfehler drin. In der Stored Procedure steckt eine ganz normale Select-anweisung drin. aber.. mom.. Ach das kann es natürlich sein.

Okey ich bin blöd..

NilleHammer. Vielen Dank du hast mir sehr geholfen wieder licht ins dunkle zu bringen.

Ich hab in der Stored Procedure eine SELECT-Anweisung in einer SELECT-Anweisung und wenn diese keine Werte zurückliefert, was ja nicht sein kann im normalem Programm-Ablauf liefert die SELECT-Anweisung auch kein gültiges Resultset. AUCH kein leeres!

Super. Ich probiere das grad. Hab beim debuggen wohl nen Fehler eingebaut.. omg. ich werd verrückt... :-(
 
laut API

boolean execute()
ResultSet executeQuery()
int executeUpdate()

hmm...

[EDIT]ok dann gzi[/EDIT]
 
Ja doch das war es also..

Vielen Dank. Das Problem hat sich dann jetzt auch in Luft aufgelöst.

Ein SELECT, indem ich über ein SELECT etwas abfrage und nichts gefunden wird, liefert auch kein gültiges Resultset.

SELECT * FROM tabelle WhERE bla IN(hier kein Ergebnis) liefert auch kein Ergebnis. bzw. ist das überhaupt eine Gültige abfrage? Wenn ja aber dann kein gültiges Ergebnis. Und deshalb Resultet is From Update. No Data.

SELECT *(Hier nichts gefunden) FROM tabelle WHERE bla IN(blablabla); Liefert zwar auch nichts ABER liefert ein gültiges Ergebnis?

Kann mir das jemand erklären?
 
Ja Nillehammer da hast du natürlich recht. Möglich ist das. Stellt sich die Frage ob ein Join denn schneller ist als ein Select mit einer Select-unterabfrage.
 

Zurück
Oben