# Operation not allowed after Result Set closed



## Proggy (30. Jan 2007)

Hallo, 

bekomme obige Fehlermeldung, aber verstehe nicht, wieso, denn mein Result-Set rs2 ist meiner Meinung nach doch nicht geschlossen, oder:


```
else {     //Ausgabe der Position in der Highscore-Liste
			 int hi1=1;   //Hilfszaehler  
			try{
				stmt = cn.createStatement();
				
				rs2=stmt.executeQuery("Select * from highscores order by score desc");
				
				}catch(Exception e){;} 
				
                        try{
				rs2.beforeFirst();    //hier soll der Fehler liegen!!!
			    rs2.next();
				while (rs2.getString("nick")!=spieler)
			     {
			     hi1++;
			     rs2.next();
			     } 
			
			     }catch(Exception e){e.printStackTrace();} 
			
			   String pos="Sie belegen Platz"+hi1+"!";
			   g.drawString(pos,30,100);
			   try{cn.close();}catch(Exception e){;} 
		     }
```

rs2 verwende ich hier zum erstenmal.

Gruß
Andreas


----------



## spoensche (30. Jan 2007)

Verwende mal in deinem "catch block" die SQLEXception anstatt der standard Exception. Weiterhin reicht es wenn du die ausführung des statements und die result set iteration in einen try block schreibst und du  brauchst  nach dem ausführen des statements nicht noch zusätzlich den cursor des result sets nich mit beforeFirst() zu setzten.

Beispiel:

Dein code:



```
try{
            rs2.beforeFirst();    //hier soll der Fehler liegen!!!
             rs2.next();
            while (rs2.getString("nick")!=spieler)
              {
              hi1++;
              rs2.next();
              }
         
}
catch(Exception e) {e.printStackTrace();}
```


Verbesserung:


```
try{
            
            
            while (rs2.next()) {
                if (rs2.getString("nick") != "spieler")
                     hi1++;
              
              }
         
}
catch (SQLException e) {
     e.printStackTrace
}
```


----------



## Proggy (30. Jan 2007)

danke, aber das hat nix gebracht. Aber wenn ich das Statement

```
cn.close(),
```
, mit dem ich die Connection cn weiter unten schließe, rausnehme, verschwindet die Meldung. Stattdessen funktioniert dann aber die Schleife nicht mehr. Er soll die Tabelle solange durchlaufen, bis er in der Spalte mit dem Namen nick den Spieler findet. Spieler ist eine String-Variable, die ich so belegt habe:

```
String spieler="\"Alfonso\"";
```

aber er läuft unendlich, bsi er abbricht mit "After end of result set".

Verstehs nicht. Es gibt einen Spieler mit dem Namen Alfonso in der Tabelle[/code]


----------



## spoensche (30. Jan 2007)

also willst du den highscore von einem einzelnen spieler haben?? wenn ja, versuchs mal so:


```
SELECT * FROM highscore WHERE nick='spieler'
```


----------



## Proggy (30. Jan 2007)

Danke, aber ich sortiere zuerst die Ausgabe und suche dann die Position von, in diesem Falle, Alfonso, also seinen Rang in der Highscore-Liste


----------



## Proggy (31. Jan 2007)

Kann es sein, daß in der Schleife


```
while (rs2.getString("nick")!=spieler)
		              {
		              hi1++;
		              rs2.next();
		              }
```
der Fehler liegt, da er über die Anzahl der Datensätze hinaus läuft, also den Spieler mit dem Namen Alfonso nicht findet.

Diesen habe ich weiter oben mit 
	
	
	
	





```
String spieler="\"Alfonso\"";
```
 festgelegt.


----------



## SlaterB (31. Jan 2007)

deine Schleife ist Müll 
es wurde doch schon eine andere vorgeschlagen, die den boolean-Rückgabewert von rs2.next() berücksichtigt

außerdem musst du Strings mit equals vergleichen,
mit == wird in diesem Fall (ein String aus dem Programm, einer aus der DB) garantiert nicht klappen


```
while (rs2.next() && !spieler.equals(rs2.getString("nick"))) {
      hi1++;
}
```

so, nun stehen die Chancen höher,

ansonsten kläre genauer wann der Fehler kommt,
falls dir das die Fehlermeldung nicht sagt (Zeile)

mache Ausgaben:
System.out.println("ResultSet geladen");
System.out.println("in Schleife, aktueller Nick ist: "+..);
System.out.println("nach Schleife, vor close");
System.out.println("nach close");

usw.


----------



## Proggy (31. Jan 2007)

Danke! Das hilft mir weiter. Wusste nicht, daß ich nicht mit == vergleichen darf.
Nochmal danke


----------

