Maison > Article > base de données > Pourquoi mon application Java génère-t-elle une exception MySQLSyntaxError lors de l'insertion de données ?
JDBC signale une exception MySQLSyntaxError avec une instruction valide
Dans une application Java se connectant à une base de données MySQL, une exception a été rencontrée lors de la tentative d'insertion d'un nouveau lignes dans un tableau. L'exception MySQLSyntaxError a été levée, malgré le fait que l'instruction INSERT s'est exécutée avec succès lors de l'utilisation de MySQL Workbench.
Le code fourni est :
<code class="java">public static boolean aggiungiElem(String nome, GrafoGenerico g){ //... PreparedStatement sInserim=conn.prepareStatement(sqlCommandInserim); sInserim.setString(1, utente); sInserim.setString(2, nome); //sInserim.setObject(3,g); System.out.println(sInserim.toString()); sInserim.executeUpdate(sqlCommandInserim); sInserim.close(); return true; //... }</code>
La trace de pile de l'exception a révélé ce qui suit :
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
Cause
L'erreur suggère qu'il y a un problème de syntaxe dans l'instruction INSERT. Cependant, après vérification, la déclaration semble valide.
Résolution
Le problème réside dans la ligne :
<code class="java">sInserim.executeUpdate(sqlCommandInserim);</code>
Cette ligne tente pour exécuter la chaîne SQL brute au lieu d'exécuter le PreparedStatement avec les valeurs définies. La méthode appropriée pour exécuter PreparedStatement est :
<code class="java">sInserim.executeUpdate();</code>
Considérations supplémentaires
En dehors de ce problème spécifique, il est important de noter que des fuites de ressources peuvent se produire si PreparedStatements ne sont pas correctement fermés. Pour éviter cela, il est recommandé d'utiliser le bloc final pour fermer PreparedStatement ainsi que d'autres ressources telles que Connection, Statement et ResultSet.
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!