Maison > base de données > tutoriel mysql > le corps du texte

Pourquoi mon code JDBC renvoie-t-il une exception MySQLSyntaxErrorException malgré l'utilisation d'une instruction INSERT valide ?

Susan Sarandon
Libérer: 2024-10-31 07:14:01
original
273 Les gens l'ont consulté

Why does my JDBC code throw a MySQLSyntaxErrorException despite using a valid INSERT statement?

Exception JDBC : MySQLSyntaxError avec une instruction SQL valide

Dans cet article, nous abordons un problème rencontré lors de l'utilisation de JDBC pour insérer des données dans un Base de données MySQL. Nous avons reçu une exception MySQLSyntaxError malgré l'exécution d'une instruction INSERT valide dans MySQL Workbench.

Pour enquêter sur la cause sous-jacente, analysons le code :

<code class="java">public static boolean aggiungiElem(String nome, GrafoGenerico g){
    if(connessioneAperta()){
        try{
            String sqlCommandUser = "SELECT USER()";
            String sqlCommandInserim = "INSERT INTO salvataggi VALUES ( ? , ? , DEFAULT , NULL );";
            PreparedStatement sUser = conn.prepareStatement(sqlCommandUser);
            ... // Execute user query
            PreparedStatement sInserim = conn.prepareStatement(sqlCommandInserim);
            sInserim.setString(1, utente);
            sInserim.setString(2, nome);
            System.out.println(sInserim);
            sInserim.executeUpdate(sqlCommandInserim);
            ... // Close PreparedStatements and ResultSet
        }
        catch(SQLException e){
            e.printStackTrace();
            return false;
        }
    }
    else
        return false;
}</code>
Copier après la connexion

Examen de la trace de la pile :

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

Cette erreur indique qu'il y a une erreur de syntaxe dans l'instruction SQL. Cependant, notre instruction INSERT semble être correcte.

En y regardant de plus près, nous remarquons que la méthodeexecuteUpdate() prend un argument String SQLCommandInserim au lieu du PreparedStatement sInserim. Il s'agit d'un oubli dans le code.

Solution :

Pour résoudre ce problème, remplacez la ligne suivante :

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

Par :

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

En appelant executeUpdate() sur PreparedStatement, JDBC remplacera les espaces réservés (?) par les valeurs définies à l'aide de la méthode setString(), évitant ainsi l'erreur de syntaxe.

Considérations supplémentaires :

Il est également recommandé d'utiliser le bloc final pour fermer tous les objets de la base de données (PreparedStatements, Connections, Statements et ResultSets) afin d'é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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!