Maison >base de données >tutoriel mysql >Pourquoi mon code JDBC renvoie-t-il une exception MySQLSyntaxErrorException malgré l'utilisation d'une instruction INSERT valide ?

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

Susan Sarandon
Susan Sarandonoriginal
2024-10-31 07:14:01384parcourir

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>

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

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>

Par :

<code class="java">sInserim.executeUpdate();</code>

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!

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