# Problem mit Result-set



## Proggy (19. Aug 2007)

Hallo,

mit folgendem Code möchte ich in einer Tabelle nach einem Nicknamen suchen:

```
try{
			stmt2 = cn.createStatement();
			
			commandstring="SELECT * FROM highscores ORDER BY score DESC, laufzeit ASC;";
			rs2=stmt2.executeQuery(commandstring);  //oder ASC?
			
			}catch(Exception e){e.printStackTrace();} 
			try{
				rs2.beforeFirst();    //hier soll der Fehler liegen!!!
	            
	             while (rs2.next() && !spieler.equals(rs2.getString("nick"))) {
	                 hi5++;
	           }
```

bekomme aber jedesmal eine NullPointer-Exception in der Zeile rs2.beforeFirst()     wenn der Spieler mit diesem Nicknamen nicht gefunden werden kann. Was mache ich falsch? Danke!!


----------



## SlaterB (19. Aug 2007)

wird denn überhaupt ein ResultSet erzeugt? 

rs2=stmt2.executeQuery(commandstring);

->

System.out.println("gleich gehts los");
rs2=stmt2.executeQuery(commandstring);
System.out.println("rs2 ist: "+rs2);


----------



## mikachu (20. Aug 2007)

ich glaube, dass du die spaltennamen in der select anweisung explizit angeben musst, nach welchen du bei der order by-klausel sortierst... bin mir aber nicht mehr so sicher.


----------



## SlaterB (20. Aug 2007)

ich glaube nicht


----------



## ARadauer (20. Aug 2007)

lass am besten die datenbank suchen:


```
commandstring="SELECT * FROM highscores where nick = '"+spieler+"' ORDER BY score DESC, laufzeit ASC"; 
rs2=stmt2.executeQuery(commandstring); 
while(rs2.next()){
    System.out.println(rs2.getString("nick");
}
```

..so ungefähr


----------



## Guest (20. Aug 2007)

Sicher, dass es eine NullPointerException ist und nicht "Curso is forward only" oder so?
Ansonsten mach noch das Semikolon in dem SQL Statement weg.


----------



## tuxedo (20. Aug 2007)

Gibts nen Grund warum man das Semikolon weglassen soll. Hab das nämlich bisher auch überall drin.


----------



## Guest (20. Aug 2007)

alex0801 hat gesagt.:
			
		

> Gibts nen Grund warum man das Semikolon weglassen soll. Hab das nämlich bisher auch überall drin.


Gegenfrage: Gibt es einen Grund das Semikolon zu schreiben? 

Es ist i.d.R. ein Trennzeichen für mehrere Statements in DDL. Da du aber nur ein Statement ausführst, ist es
überflüssig.


----------



## Proggy (20. Aug 2007)

Hallo,

erstmal Danke. 

Warum er eine solche Meldung ("NullPointer Execption") erzeugt, ist mir auch schleierhaft.

Meld mich wieder.


----------



## tuxedo (20. Aug 2007)

Anonymous hat gesagt.:
			
		

> alex0801 hat gesagt.:
> 
> 
> 
> ...



Naja, wenn's nicht stört isses ja egal, oder ?!


----------



## BigBoss (21. Aug 2007)

hmm also das Semikolon ist der abschluss eines SQL-Querys. Ich hab schon Fälle gehabt da hat er ohne nen SQL ERROR gebracht. Die ORDER BY Spalte musst du nicht in der SELECT Clausel angeben da mit * eh schon alle abgedeckt sind.
Zu deinem Eigentlichen Problem da stimme ich mti ARadauer überein. Lass die Datenbank suchen und zähl dann in der while schleife einfach deinen hightscore hoch
also:



```
commandstring="SELECT * FROM highscores where nick = '"+spieler+"' ORDER BY score DESC, laufzeit ASC";
rs2=stmt2.executeQuery(commandstring);
while(rs2.next())
{
    hi5++;
}
```

dann sollte es gehen.

Gruß BB

PS: Warum du das ganze sortierst ist mir unklar!?


----------



## FenchelT (21. Aug 2007)

BigBoss hat gesagt.:
			
		

> Die ORDER BY Spalte musst du nicht in der SELECT Clausel angeben da mit * eh schon alle abgedeckt




Hallo BigBoss,

ORDER BY und der * habe nichts miteinander zu tun.

SELECT * besagt lediglich, dass er alle FElder aus einer Tabelle selektieren soll.
ORDER BY sortiert nach den angegebenen Feldern.

asc (ascending) besagt aufsteigen, desc(descending) besagt absteigen.





> PS: Warum du das ganze sortierst ist mir unklar!?



Na, weil er alle Datensaetze absteigend sortiert nach der highscore anzeigen moechte.


Was hier eher kritisch ist, ist der SELECT * in einer Anwendung, aber das ist ein anderes Thema.


Viele Gruesse
FenchelT


----------



## Niki (22. Aug 2007)

Du zählst alle Einträge in der ein bestimmter Spieler vorkommt, oder?

Warum machst du nicht einfach ein select count(*) from?

Das sollte ja das gewünschte Ergebnis bringen und geht um einiges schneller.

Ausserdem hast du ja in deinem Vergleich eine Verneinung drin (!), ist das erwünscht?


----------



## Proggy (24. Aug 2007)

ich will ermitteln, ob sich der Spieler schon in der highscore-Tabelle befindet. Seine Position in dieser Tabelle interessiert mich.
Nach Spielende (dieser Code-Ausschnitt fehlt hier) gebe ich aus:

" Sie rutschen von Platz (jetzt den Inhalt der hi-Variable ausgeben) auf Platz x. (auch x ermittle ich dort (Code fehlt hier ebenfalls)

das ging ja auch alles mal, habe jetzt das Projekt drei Monate ruhen lassen und plötzlich bekomme ich obige Fehlermeldung beim Ausführen meines Applets.


----------

