Heim  >  Artikel  >  Datenbank  >  Warum erhalte ich eine MySQLSyntaxError-Ausnahme, wenn ich PreparedStatements in meiner Java-Anwendung verwende?

Warum erhalte ich eine MySQLSyntaxError-Ausnahme, wenn ich PreparedStatements in meiner Java-Anwendung verwende?

Barbara Streisand
Barbara StreisandOriginal
2024-10-31 07:38:02723Durchsuche

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

JDBC gibt trotz korrekter Anweisung eine MySQLSyntaxError-Ausnahme zurück

Beim Ausführen einer INSERT-Anweisung in einer Java-Anwendung, die eine Verbindung zu einer MySQL-Datenbank herstellt, tritt eine MySQLSyntaxError-Ausnahme auf angetroffen. Obwohl die Richtigkeit der Anweisung mithilfe von MySQL Workbench überprüft wurde, bleibt der Fehler weiterhin bestehen.

Eine Untersuchung des bereitgestellten Codes zeigt, dass das Problem in der Verwendung von Platzhaltern (?) innerhalb der PreparedStatement liegt. Diese Platzhalter sollten mit den setXXX()-Methoden ordnungsgemäß festgelegt werden, anstatt in der anexecuteUpdate() übergebenen SQL-Zeichenfolge zu erscheinen.

Hier ist der geänderte Code:

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;
}

Beachten Sie, dassexecuteUpdate( Die Methode „sqlString“ sollte nur mit Statement-Objekten verwendet werden, nicht mit PreparedStatement-Objekten. Eine falsche Verwendung, wie im Originalcode gezeigt, würde zu einem Syntaxfehler führen.

Darüber hinaus wird empfohlen, das PreparedStatement innerhalb eines final-Blocks zu schließen, um im Falle von Ausnahmen einen Ressourcenverlust zu verhindern. Dies gilt auch für Connection, Statement und ResultSet.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich eine MySQLSyntaxError-Ausnahme, wenn ich PreparedStatements in meiner Java-Anwendung verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn