Maison >base de données >tutoriel mysql >MySQL PreparedStatement : Pourquoi `executeQuery()` échoue-t-il avec une erreur de syntaxe ?
Instruction préparée MySQL : résolution des executeQuery()
erreurs de syntaxe
Un problème courant lors de l'utilisation de PreparedStatement
de Java avec MySQL implique des erreurs SQLException
indiquant des problèmes de syntaxe SQL à proximité de l'espace réservé (?
). Cela résulte souvent d'une mauvaise exécution de l'instruction.
Le problème :
Le code Java employant PreparedStatement
peut générer une exception similaire à :
<code>... 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 '?'</code>
L'approche incorrecte :
L'erreur se produit généralement lors de la tentative d'exécution du PreparedStatement
en utilisant executeQuery()
avec un argument de chaîne (par exemple, la requête SQL elle-même) :
<code class="language-java">statement.executeQuery(searchPerson); // Incorrect</code>
Ceci traite searchPerson
comme une chaîne SQL littérale, en ignorant les espaces réservés définis dans PreparedStatement
.
La bonne solution :
La clé est d'exécuter le PreparedStatement
sans aucun paramètre transmis à executeQuery()
:
<code class="language-java">statement.executeQuery(); // Correct</code>
Les paramètres sont déjà liés au PreparedStatement
en utilisant setString()
, setInt()
, etc., avant l'appel executeQuery()
. Fournir à nouveau la chaîne de requête comme argument remplace cette liaison et entraîne une erreur de syntaxe. executeQuery()
exécute simplement l'instruction avec les paramètres pré-liés.
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!