Maison > base de données > tutoriel mysql > Pourquoi `statement.executeQuery(searchPerson);` provoque-t-il une erreur de syntaxe SQL dans les instructions préparées Java ?

Pourquoi `statement.executeQuery(searchPerson);` provoque-t-il une erreur de syntaxe SQL dans les instructions préparées Java ?

Mary-Kate Olsen
Libérer: 2025-01-11 15:22:41
original
574 Les gens l'ont consulté

Why Does `statement.executeQuery(searchPerson);` Cause a SQL Syntax Error in Java Prepared Statements?

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal