Maison  >  Article  >  base de données  >  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
Susan Sarandonoriginal
2024-10-31 00:35:30255parcourir

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>

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>

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>

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>

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!

Déclaration:
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