Maison >Java >javaDidacticiel >Pourquoi mon PreparedStatement en Java génère-t-il une erreur de syntaxe MySQL proche de « ? » ?
Lors de la tentative d'exécution d'une requête avec PreparedStatement en Java, une erreur se produit indiquant une erreur de syntaxe proche de "?". L'exception est :
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? or MemberName = ?' at line 1
String query = "select MemberID, MemberName from members where MemberID = ? or MemberName = ?"; Connection conn = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD); PreparedStatement s = conn.prepareStatement(query); s.setInt(1, 2); s.setString(2, "zen"); ResultSet rs = s.executeQuery(query); // Fail!
L'erreur se produit car MySQL ne reconnaît pas le "?" dans la requête SQL comme espace réservé. Cela est dû à l'appel suivant :
rs = s.executeQuery(query); // Fail!
Au lieu d'utiliser PreparedStatement#executeQuery sans argument, la chaîne de requête d'origine est transmise, ce qui remplace l'instruction préparée.
Pour résoudre le problème , la méthodeexecuteQuery de PreparedStatement doit être appelée sans arguments :
rs = s.executeQuery(); // OK!
Bien que sans rapport avec le problème d'origine, le code perd des ressources. Pour éviter cela, les ressources doivent être fermées en utilisant l'idiome JDBC :
try { // Acquire resources here } catch (Exception e) { // Handle exception } finally { // Close resources here }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!