Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQLSyntaxErrorException près de ? lors de la tentative d'exécution de PreparedStatement

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException :Vous avez une erreur dans votre syntaxe SQL ; consultez le manuel correspondant à la version de votre serveur MySQL pour connaître la bonne syntaxe à utiliser près de '? ou NomMembre =?' à la ligne 1

MySQL ne comprend pas la signification de ? dans la requête SQL. C'est en effet une syntaxe SQL invalide. Donc, d'une manière ou d'une autre, il n'a pas été remplacé par PreparedStatement . Et devinez quoi ?

PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);        
rs = s.executeQuery(query); // Fail!

Vous remplacez la requête préparée par la requête d'origine ! Vous devez appeler le PreparedStatement#executeQuery() méthode au lieu de Statement#executeQuery(String) .

PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);        
rs = s.executeQuery(); // OK!

Sans rapport avec le problème, votre code perd des ressources. La base de données en manquera après plusieurs heures et votre application plantera. Pour résoudre ce problème, vous devez suivre l'idiome JDBC de fermeture Connection , Statement et ResultSet dans le finally bloc du try bloc où ils ont été acquis. Consultez le tutoriel de base JDBC pour plus de détails.