Maison > base de données > tutoriel mysql > 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
Libérer: 2024-11-02 02:32:30
original
1090 Les gens l'ont consulté

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>
Copier après la connexion

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
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

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