Heim  >  Artikel  >  Datenbank  >  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?

Susan Sarandon
Susan SarandonOriginal
2024-10-31 07:14:01274Durchsuche

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:

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

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. Unsere INSERT-Anweisung scheint jedoch 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:

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

Durch:

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

Durch den Aufruf vonexecuteUpdate() für PreparedStatement ersetzt JDBC die Platzhalter (?) durch die mit der setString()-Methode festgelegten Werte und verhindert so den Syntaxfehler.

Zusätzliche Überlegungen:

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

Das obige ist der detaillierte Inhalt vonWarum löst mein JDBC-Code trotz Verwendung einer gültigen INSERT-Anweisung eine MySQLSyntaxErrorException aus?. 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