Maison >base de données >tutoriel mysql >Pourquoi mon instruction préparée dans MySQL JDBC renvoie-t-elle une \'MySQLSyntaxErrorException\' ?
Instruction préparée MySQL : surmonter l'erreur "MySQLSyntaxErrorException"
Lors de l'utilisation d'instructions préparées dans JDBC pour MySQL, il est essentiel de garantir une syntaxe et une syntaxe appropriées. usage. Une erreur courante rencontrée par les développeurs est « MySQLSyntaxErrorException ». Explorons un cas spécifique de cette erreur et la solution correspondante.
Problème :
Une application Java utilisant le connecteur MySQL rencontre une « MySQLSyntaxErrorException » lors de l'exécution d'une déclaration préparée. Le code utilise l'instruction suivante pour la récupération des données :
<code class="java">PreparedStatement stmt = con.prepareStatement(selectSQL); stmt.setInt(1, ad_id); rs = stmt.executeQuery(selectSQL);</code>
Lors de l'exécution, l'erreur est générée.
Message d'erreur :
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 '?' at line 1
Solution :
L'erreur réside dans la syntaxe d'exécution de l'instruction préparée. Plus précisément, la ligne suivante est incorrecte :
<code class="java">rs = stmt.executeQuery(selectSQL);</code>
La syntaxe correcte pour exécuter une instruction préparée est :
<code class="java">rs = stmt.executeQuery();</code>
En omettant l'argument selectSQL de la méthodeexecuteQuery, l'instruction est exécutée correctement et l'erreur est résolue.
Explication :
Dans une instruction préparée, la requête SQL est transmise lors de la préparation de l'instruction et les paramètres sont définis séparément à l'aide du Méthodes setX (par exemple, setInt). La méthode executeQuery est utilisée pour récupérer le jeu de résultats, qui doit être appelé sans aucun argument. Le code d'origine incluait de manière incorrecte la chaîne de requête SQL dans l'appel de la méthodeexecuteQuery, provoquant l'erreur 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!