# SQL Fehler helft mir bitte



## phr33k (22. Jan 2009)

Hey
ich brauche mal eure Hilfe! Was ist daran falsch? Der landet immer im CATCH Block.... Und gibt als sqlException null aus.


```
public void loadById (int id){
		String query = "SELECT * FROM `test` WHERE `id`="+id+" LIMIT 1;";
		ResultSet result = sqlConn.executeQueryWithResult(query);
		try {
			firstName = result.getString("firstName");
			lastName = result.getString("lastName");
			passwordHash = result.getString("passwordHash");
			admin = result.getBoolean("isAdmin");
			id = result.getInt("id");
		} catch (SQLException ex) {
			new ProgramError("Mysql - Fehler", "Es ist ein Fehler bei der Verbindung zur Datenbank aufgetreten.\n\nFehler:\nSQLException: " + ex.getMessage() + "\nSQLState: " + ex.getSQLState() + "VendorError: " + ex.getErrorCode());
		}
```



Gruß Patrick


----------



## SlaterB (22. Jan 2009)

lasse die einfachen Anführungszeichen weg oder verwende ' statt `
lasse das LIMIT weg,
lasse das ganze WHERE weg,
teste eine andere Tabelle

verwende 
ex.printStackTrace()


----------



## Ebenius (22. Jan 2009)

SlaterB hat gesagt.:
			
		

> lasse die einfachen Anführungszeichen weg oder verwende ' statt `


Genauer: Hochkomma bei den Werten, und bei den Spalten-/Tabellennamen weglassen.


----------



## phr33k (22. Jan 2009)

Habe gerade mal nur SELECT * FROM test ausprobiert. Bekomme immer noch den Fehler.

Gruß Patrick


----------



## phr33k (22. Jan 2009)

java.sql.SQLException
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
	at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:815)
	at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5528)
	at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5448)
	at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5488)
	at org.janning.connector.Test.loadById(Test.java:24)
	at Main.main(Main.java:11)


----------



## Ebenius (22. Jan 2009)

[ edit ] Anschiss zurückgenommen... Da gibt's jetzt nen StackTrace.


----------



## phr33k (22. Jan 2009)

Japs. Woran kann das denn liegen, dass das da nicht klappt?


----------



## Ebenius (22. Jan 2009)

Probier mal: 
	
	
	
	





```
...
ResultSet result = sqlConn.executeQueryWithResult(query); 
try {
  while(result.next()) {
         firstName = result.getString("firstName"); 
         lastName = result.getString("lastName"); 
         passwordHash = result.getString("passwordHash"); 
         admin = result.getBoolean("isAdmin"); 
         id = result.getInt("id"); 
  }
} catch (SQLException ex) {
...
```


----------



## maki (22. Jan 2009)

```
at org.janning.connector.Test.loadById(Test.java:24)
```
Was steht denn in der Zeile 24 deines Quellcodes?


----------



## phr33k (22. Jan 2009)

Ebenius hat gesagt.:
			
		

> Probier mal:
> 
> 
> 
> ...



Danke jetztz geht es. Die nichtvorhandene Schleife war es...
Bin noch ein Anfänger was Java + Mysql angeht....


----------



## SlaterB (22. Jan 2009)

die Fehlermeldung ist da wirklich wenig aussagekräftig,
aber der StackTrace zeigt dir, sofern man die Zeilennummern lesen kann, dass die Exception erst beim Auslesen des ResultSets auftritt, nicht bei der DB-Anfrage
-> immer verwenden


----------



## MadMG (26. Jan 2009)

Soweit ich weiß wird beim ResultSet erst mit dem Aufruf von next() auf das erste Ergebnis "gesprungen". In diesem fall würde in _if(next()) {}_ ebenso reichen, da im Normalfall aufgrund deiner Abfrage nur ein Result geliefert wird.


----------



## Ebenius (26. Jan 2009)

MadMG hat gesagt.:
			
		

> Soweit ich weiß wird beim ResultSet erst mit dem Aufruf von next() auf das erste Ergebnis "gesprungen". In diesem fall würde in _if(next()) {}_ ebenso reichen, da im Normalfall aufgrund deiner Abfrage nur ein Result geliefert wird.


Richtiger Hinweis. Hatte im Nachhinein überlegt, ob ich das noch klarstelle... Aber dann vergessen. Gut, dass Du's gemacht hast.


----------

