Maison  >  Article  >  base de données  >  Pourquoi est-ce que je reçois une exception MySQLSyntaxError lorsque j'utilise PreparedStatements dans mon application Java ?

Pourquoi est-ce que je reçois une exception MySQLSyntaxError lorsque j'utilise PreparedStatements dans mon application Java ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-31 07:38:02723parcourir

Why am I getting a MySQLSyntaxError Exception when using PreparedStatements in my Java application?

JDBC renvoie une exception MySQLSyntaxError malgré une déclaration correcte

Lors de l'exécution d'une instruction INSERT dans une application Java se connectant à une base de données MySQL, une exception MySQLSyntaxError est rencontrés. Malgré la vérification de l'exactitude de la déclaration à l'aide de MySQL Workbench, l'erreur persiste.

L'examen du code fourni révèle que le problème réside dans l'utilisation d'espaces réservés (?) dans le PreparedStatement. Ces espaces réservés doivent être correctement définis à l'aide des méthodes setXXX() plutôt que d'apparaître dans la chaîne SQL transmise à executeUpdate().

Voici le code modifié :

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);
            ResultSet risultatiUtente=sUser.executeQuery();
            String utente = null;
            while(risultatiUtente.next()){
                utente=risultatiUtente.getString(1);
            }
            sUser.close();
            PreparedStatement sInserim=conn.prepareStatement(sqlCommandInserim);
            sInserim.setString(1, utente);
            sInserim.setString(2, nome);
            //sInserim.setObject(3,g);
            System.out.println(sInserim.toString());
            sInserim.executeUpdate(); // Execute the prepared statement without the SQL string
            sInserim.close();
            return true;
        }
        catch(SQLException e){
            // Log the exception and handle appropriately
        }
        finally {
            if (sInserim != null) {
                sInserim.close();
            }
        }
    }
    else
        return false;
}

Notez que l'executeUpdate( sqlString) ne doit être utilisée qu’avec des objets Statement, et non avec des objets PreparedStatement. Une utilisation incorrecte, comme indiqué dans le code d'origine, entraînerait une erreur de syntaxe.

De plus, il est recommandé de fermer le PreparedStatement dans un bloc final pour éviter une fuite de ressources en cas d'exceptions. Cela s'applique également à 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