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 ?

Pourquoi mon application Java génère-t-elle une exception MySQLSyntaxError lors de l'insertion de données ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-02 02:32:301000parcourir

Why Does My Java Application Throw a MySQLSyntaxError Exception When Inserting Data?

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!

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