首頁  >  文章  >  資料庫  >  儘管使用了有效的 INSERT 語句,為什麼我的 JDBC 程式碼仍會拋出 MySQLSyntaxErrorException?

儘管使用了有效的 INSERT 語句,為什麼我的 JDBC 程式碼仍會拋出 MySQLSyntaxErrorException?

Susan Sarandon
Susan Sarandon原創
2024-10-31 07:14:01274瀏覽

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

JDBC 例外:具有有效SQL 語句的MySQLSyntaxError

在本文中,我們深入研究使用JDBC 向資料庫插入資料時遇到的問題。 MySQL 資料庫。儘管在 MySQL Workbench 中執行了有效的 INSERT 語句,我們還是收到了 MySQLSyntaxError 例外。

為了調查根本原因,讓我們分析程式碼:

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

檢查堆疊追蹤:

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

此錯誤表示SQL語句有語法錯誤。然而,我們的 INSERT 語句似乎是正確的。

經過仔細檢查,我們注意到executeUpdate() 方法採用字串參數 SQLCommandInserim 而不是PreparedStatement sInserim。這是代碼中的疏忽。

解決方案:

要解決此問題,請將以下行替換:

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

替換為:

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

替換為:

透過在PreparedStatement上呼叫executeUpdate(),JDBC會將佔位符(?)替換為使用setString()方法設定的值,從而防止語法錯誤。

其他注意事項:也建議使用finally區塊關閉所有資料庫物件(PreparedStatements、Connections、Statements和ResultSet),以防止出現異常時資源外洩。

以上是儘管使用了有效的 INSERT 語句,為什麼我的 JDBC 程式碼仍會拋出 MySQLSyntaxErrorException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn