2010-11-07 73 views
0

J'ai exécuté cette requête sans problème, mais dernièrement j'ai eu des exceptions.java: Statement.RETURN_GENERATED_KEYS Erreur: S1000 Exp: Avant le début du jeu de résultats

(sur un serveur MySQL)

48442 [NioProcessor-1] ERROR c.x.xpofacebook.mysql.MysqlDb - SQLException: Before start of result set 
48443 [NioProcessor-1] ERROR c.x.xpofacebook.mysql.MysqlDb - SQLState: S1000 
48443 [NioProcessor-1] ERROR c.x.xpofacebook.mysql.MysqlDb - VendorError: 0 
48451 [NioProcessor-1] ERROR c.x.xpofacebook.mysql.MysqlDb - stack trace: java.sql.SQLException: Before start of result set 

Le code:

String createPlayerRow = "insert into highscore_challenge_player " 
      + "(fb_user_id,played,best_score,highscore_challenge_id) values ((select fb_user.id from fb_user where uid=?),?,?,?)"; 
     stmt.close(); 
     stmt = conn.prepareStatement(createPlayerRow,Statement.RETURN_GENERATED_KEYS); 
     stmt.setLong(1, uid); 
     stmt.setInt(2, 0); 
     stmt.setInt(3, 0); 
     stmt.setInt(4, highscoreChallengeId); 
     stmt.executeUpdate(); 
     rs = stmt.getGeneratedKeys(); 
     rowId = rs.getInt(1); <--- ERROR IN THIS LINE  

des idées? !?

grâce

Répondre

1

Vous devez to get to the first result avant de pouvoir commencer à regarder les articles en elle. Plus explicitement: vous devez appeler rs.next() au moins une fois avant de pouvoir accéder aux résultats. Plus généralement, vous devez appeler n fois next pour regarder la ligne n, et avec les résultats sql, le compte commence à 1, pas 0.

+0

merci beaucoup! :) – ufk

+1

@ufk: pas de problème - J'ai appris la réponse à cette question en posant ma propre question. Assurez-vous de redonner quand vous le voyez venir! – Carl