Instructions préparées Java : Dépannage des erreurs de syntaxe SQL avec '?' Espaces réservés
L'utilisation des instructions préparées par Java conduit souvent à des messages « Erreur de syntaxe SQL », provenant souvent d'une utilisation incorrecte de l'espace réservé (?
). Examinons un scénario courant :
L'extrait de code Java suivant démontre une approche incorrecte :
<code class="language-java">String searchPerson = "select * from persons where surname like ? and name like ?"; statement.executeQuery(searchPerson); </code>
La chaîne searchPerson
définit correctement la requête SQL avec des espaces réservés pour surname
et name
. Cependant, passer searchPerson
directement à statement.executeQuery()
est la source de l'erreur. executeQuery()
attend une instruction préparée déjà configurée avec ses paramètres ; il n'accepte pas la chaîne SQL comme paramètre.
La mise en œuvre correcte :
La solution réside dans la liaison correcte des paramètres avant d'exécuter la requête. La méthode executeQuery()
doit être appelée sans aucun argument après la liaison des paramètres. Le code corrigé ressemblerait à ceci (en supposant que surnameValue
et nameValue
contiennent les valeurs réelles) :
<code class="language-java">String searchPerson = "select * from persons where surname like ? and name like ?"; PreparedStatement statement = connection.prepareStatement(searchPerson); statement.setString(1, surnameValue); statement.setString(2, nameValue); ResultSet rs = statement.executeQuery(); // Execute without additional parameters // Process the ResultSet (rs) here</code>
Ce code révisé crée d'abord un objet PreparedStatement
, puis définit les valeurs des paramètres à l'aide de setString()
, et enfin exécute la requête en utilisant executeQuery()
sans transmettre à nouveau la chaîne SQL. Cela garantit que la base de données interprète correctement les espaces réservés et évite les erreurs de syntaxe.
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!