Sonderbehandlung wenn ResultSet leer ist

it-girl

Aktives Mitglied
Hallo zusammen,

ich möchte Daten aus meiner DB2 auslesen, was auch klappt.
Nur habe ich nun den Fall, dass manche Anfragen kein Ergebnis liefern, was nicht weiter schlimm ist, was ich aber gesondert behandeln möchte.
Also wenn das ResultSet Daten enthält, soll ein Object mit anderen Parametern erzeugt werden, als wenn das ResultSet leer ist.

Ich habe das mal so probiert:
Java:
rs = stmt.executeQuery("SELECT Spalte_1, Spalte_2"
	+ " FROM TABLE WHERE Spalte_3 = 1 AND Spalte_4 ="
	+ DataSetMemory.getWert()
	+ " AND Spalte_5 LIKE '%"
	+ value+ "%'");

if (rs.wasNull()) { // da kommt dann ein Fehler
	new WorkingInstruction(mainprocessNode, andereVariable, graph, hierarchy);
}

while (rs.next()) {
	//noch mehr Code
	new WorkingInstruction(businessNode, rs.getString("Spalte_2"), graph, hierarchy);
}

Das funktioniert aber so nicht. Ich bekomme immer den Fehler: "Ungültige Operation: wasNull() wurde ohne abgerufene Daten aufgerufen."

Es müsste sowas wie ResultSet.isEmpty() oder so geben...

Hab jemand eine Idee, wie ich das elegant lösen kann?

Vielen Dank schon mal im Voraus 🙂

IT-girl
 
if (!rs.next())
😉

edit:
ok, man muss schon bisschen aufpassen, dass nicht die Schleife dann gleich zum zweiten Eintrag wechselt,
vielleicht doch lieber nur Schleife und dort Anzahl zählen zw. eine boolean Variable in der Schleife auf true setzen
 
hoffentlich meinen wichtigen edit gesehen, da nicht erwähnt bietet mir das die Möglichkeit noch einen weiteren Post zu sammeln,
ich setzte dann vorerst auch auf 'Erledigt'
 
@ThreadPool: Danke, aber das funktioniert bei mir leider nicht (Fehlermeldung: "
Code:
Diese Methode darf nur für ResultSet-Objekte aufgerufen werden, die verschiebbar
Code:
sind (Typ TYPE_SCROLL_SENSITIVE oder TYPE_SCROLL_INSENSITIVE).
")

@SlaterB: Wenn ich das mit dem !rs.next() mache, fehlt dann wie du richtig sagst, der erste Eintrag. Wie kann ich das umgehen? Ich habe das, was du dann geschrieben hast ("vielleicht doch lieber nur Schleife und dort Anzahl zählen zw. eine boolean Variable in der Schleife auf true setzen"), nicht so ganz verstanden...

Vielen Dank schon mal!
 
sobald die while-Schleife auch nur einmal durchlaufen wird ist klar dass das Set nicht leer ist, anderenfalls schon,
diese Information kannst du offensichtlich konversieren, indem du in der Schleife irgendwas machst, was danach noch feststellbar ist,
 
Erst den Normalfall abhandeln, dann den Spezialfall "leeres Set":

Java:
boolean isEmpty = true;
while (rs.next()) {
   normalFall();
   isEmpty = false;
}
if (isEmpty) {
   spezialFall();
}
 

Zurück
Oben