Maison > base de données > tutoriel mysql > Pourquoi mon code Java obtient-il une exception MySQLSyntaxError malgré l'utilisation d'un PreparedStatement ?

Pourquoi mon code Java obtient-il une exception MySQLSyntaxError malgré l'utilisation d'un PreparedStatement ?

Susan Sarandon
Libérer: 2024-10-31 00:35:30
original
340 Les gens l'ont consulté

Why Does My Java Code Get a MySQLSyntaxError Exception Despite Using a PreparedStatement?

JDBC renvoie une exception MySQLSyntaxError malgré une déclaration correcte

Lors de la tentative d'insertion de nouvelles lignes dans une table MySQL, une application Java a rencontré une exception MySQLSyntaxError. Après examen de l'instruction SQL, elle semble syntaxiquement correcte. Cependant, lorsqu'elle est exécutée directement à l'aide de MySQL Workbench, l'instruction a réussi.

Le code en question utilisait un PreparedStatement pour exécuter l'instruction INSERT, comme indiqué ci-dessous :

<code class="java">PreparedStatement sInserim = conn.prepareStatement(sqlCommandInserim);
sInserim.setString(1, utente);
sInserim.setString(2, nome);
sInserim.executeUpdate(sqlCommandInserim);</code>
Copier après la connexion

L'exception rencontrée était :

<code class="text">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 '? , ? , DEFAULT , NULL )' at line 1</code>
Copier après la connexion

Après un examen plus approfondi, il a été révélé que les espaces réservés (?) n'étaient pas correctement remplacés par le PreparedStatement. Cela ressortait clairement de la ligne suivante :

<code class="java">sInserim.executeUpdate(sqlCommandInserim);</code>
Copier après la connexion

La méthodeexecuteUpdate() était invoquée avec la chaîne SQL brute comme argument, au lieu d'utiliser l'objet PreparedStatement avec ses valeurs définies.

Pour corriger le problème, le code a été modifié comme suit :

<code class="java">sInserim.executeUpdate();</code>
Copier après la connexion

En utilisant executeUpdate() sans argument de chaîne SQL, les valeurs de PreparedStatement sont automatiquement utilisées, résolvant ainsi l'exception MySQLSyntaxError.

Remarque :

Bien que cela ne soit pas directement lié au problème indiqué, il est recommandé de fermer le PreparedStatement (et toute autre ressource, telle que Connection, Statement et ResultSet) dans un bloc final pour éviter les fuites de ressources en cas d'exceptions.

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