# Resultset.last() Problem



## RelaX (1. Nov 2012)

Hallo alle miteinander.

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


```
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.


----------



## vanny (1. Nov 2012)

[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


----------



## RelaX (1. Nov 2012)

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?


----------



## vanny (1. Nov 2012)

naja, wenn rs.last() ne nullpointer schmeisst, kannste ja auf null prüfen oder missversteh ich da was ?


----------



## RelaX (1. Nov 2012)

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..


----------



## vanny (1. Nov 2012)

Du bekommst also beim last() ne NPE und bei next() noData-Error (richtig?)
geht nicht einfach 
	
	
	
	





```
if(rs.last()!=null)
```
?


----------



## nillehammer (1. Nov 2012)

Habe selbst noch nie mit CallableStatement gearbeitet, aber 
	
	
	
	





```
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.


----------



## RelaX (1. Nov 2012)

Nein geht leider auch nicht. Nullpointer sobald ich drauf zugreifen möchte.


----------



## RelaX (1. Nov 2012)

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... :-(


----------



## vanny (1. Nov 2012)

laut API

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

hmm...

[EDIT]ok dann gzi[/EDIT]


----------



## RelaX (1. Nov 2012)

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?


----------



## nillehammer (2. Nov 2012)

> Kann mir das jemand erklären?


Nich direkt, nur soviel, dass Sub-Selects meist durch JOINs abgebildet werden können. Da dürfte das Problem dann überhaupt nicht auftreten. Schau mal, ob das möglich ist.


----------



## RelaX (2. Nov 2012)

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.


----------

