# Sonderbehandlung wenn ResultSet leer ist



## it-girl (17. Aug 2011)

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:

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


----------



## SlaterB (17. Aug 2011)

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


----------



## it-girl (17. Aug 2011)

*autsch*
Danke


----------



## SlaterB (17. Aug 2011)

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 (17. Aug 2011)

it-girl hat gesagt.:


> [...]
> Hab jemand eine Idee, wie ich das elegant lösen kann?





```
if (!rs.first()) { 
    new WorkingInstruction(mainprocessNode, andereVariable, graph, hierarchy);
}else{
    rs.previous();
}
```


----------



## it-girl (17. Aug 2011)

@ThreadPool: Danke, aber das funktioniert bei mir leider nicht (Fehlermeldung: "
	
	
	
	





```
Diese Methode darf nur für ResultSet-Objekte aufgerufen werden, die verschiebbar
```


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


----------



## SlaterB (17. Aug 2011)

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,


----------



## Landei (17. Aug 2011)

Erst den Normalfall abhandeln, dann den Spezialfall "leeres Set":


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


----------



## it-girl (17. Aug 2011)

Vielen lieben Dank euch, ihr habt mir wirklich sehr geholfen! :toll:

LG
IT-girl


----------



## Niki (17. Aug 2011)

ginge auch:


```
if(rs.next()){
  do{

  }while(rs.next());
} else {

}
```


----------

