„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum löst mein JDBC-Code trotz Verwendung einer gültigen INSERT-Anweisung eine MySQLSyntaxErrorException aus?

Warum löst mein JDBC-Code trotz Verwendung einer gültigen INSERT-Anweisung eine MySQLSyntaxErrorException aus?

Veröffentlicht am 07.11.2024
Durchsuche:977

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

JDBC-Ausnahme: MySQLSyntaxError mit gültiger SQL-Anweisung

In diesem Artikel befassen wir uns mit einem Problem, das bei der Verwendung von JDBC zum Einfügen von Daten in a auftritt MySQL-Datenbank. Wir haben eine MySQLSyntaxError-Ausnahme erhalten, obwohl eine gültige INSERT-Anweisung in MySQL Workbench ausgeführt wurde.

Um die zugrunde liegende Ursache zu untersuchen, analysieren wir den 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);
            ... // 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;
}

Untersuchen des Stack-Trace:

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

Dieser Fehler weist darauf hin, dass in der SQL-Anweisung ein Syntaxfehler vorliegt. Allerdings scheint unsere INSERT-Anweisung korrekt zu sein.

Bei näherer Betrachtung stellen wir fest, dass die MethodeexecuteUpdate() ein String-Argument SQLCommandInserim anstelle des PreparedStatement sInserim verwendet. Dies ist ein Versehen im Code.

Lösung:

Um dieses Problem zu beheben, ersetzen Sie die folgende Zeile:

sInserim.executeUpdate(sqlCommandInserim);

With:

sInserim.executeUpdate();

Durch den Aufruf vonexecuteUpdate() für PreparedStatement ersetzt JDBC die Platzhalter (?) mit den mit der setString()-Methode festgelegten Werten, um den Syntaxfehler zu verhindern.

Zusätzliche Überlegungen:

Es wird außerdem empfohlen, den „finally“-Block zu verwenden, um alle Datenbanken zu schließen Objekte (PreparedStatements, Connections, Statements und ResultSets), um Ressourcenlecks im Falle von Ausnahmen zu verhindern.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3