En Java, lors de l'exécution d'une requête à l'aide de PreparedStatement, on peut rencontrer une MySQLSyntaxErrorException avec le numéro d'erreur 1064 indiquant une erreur de syntaxe proche de "?". Cela peut se produire même si la requête fonctionne dans un navigateur de requêtes MySQL avec des valeurs substituées.
En y regardant de plus près, il devient évident que MySQL est incapable d'interpréter le "?" espace réservé dans la requête SQL, jugeant sa syntaxe invalide. En effet, PreparedStatement n'a pas remplacé ces espaces réservés.
L'extrait de code que vous avez partagé écrase par erreur la requête préparée par la version originale. Pour remédier à ce problème, utilisez PreparedStatement#executeQuery() au lieu de Statement#executeQuery(String):
PreparedStatement s = conn.prepareStatement(query); s.setInt(1, intValue); s.setString(2, strValue); rs = s.executeQuery(); // Correct
Remarque : Bien qu'il ne soit pas lié au problème actuel, votre code ne parvient pas à fermer le Connexion, instruction et ResultSet. Cette omission peut entraîner un épuisement des ressources et un crash ultérieur de l'application. Implémentez l'idiome JDBC approprié en fermant ces objets dans un bloc final :
try (Connection conn = DriverManager.getConnection(...); PreparedStatement s = conn.prepareStatement(...); ResultSet rs = s.executeQuery()) { // Query execution code } finally { if (rs != null) rs.close(); if (s != null) s.close(); if (conn != null) conn.close(); }
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!