首頁 > Java > java教程 > 為什麼我的 Java 中的PreparedStatement 在「?」附近拋出 MySQL 語法錯誤?

為什麼我的 Java 中的PreparedStatement 在「?」附近拋出 MySQL 語法錯誤?

Linda Hamilton
發布: 2025-01-01 02:31:09
原創
190 人瀏覽過

Why Does My PreparedStatement in Java Throw a MySQL Syntax Error Near

PreparedStatement 問題的 MySQL 語法錯誤

嘗試在 Java 中使用PreparedStatement 執行查詢時,出現錯誤,指示「?」附近有語法錯誤。例外是:

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 '? or MemberName = ?' at line 1
登入後複製

程式碼片段

String query = "select MemberID, MemberName from members where MemberID = ? or MemberName = ?";
Connection conn = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD);
PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, 2);
s.setString(2, "zen");
ResultSet rs = s.executeQuery(query); // Fail!
登入後複製

問題解決

發生錯誤是因為MySQL無法辨識「?」在 SQL 查詢中作為佔位符。這是由於以下呼叫造成的:

rs = s.executeQuery(query); // Fail!
登入後複製

不使用不含參數的PreparedStatement#executeQuery,而是傳遞原始查詢字串,這會覆寫準備好的語句。

解決此問題,PreparedStatement的executeQuery方法應該不帶參數呼叫:

rs = s.executeQuery(); // OK!
登入後複製

Resource洩漏

雖然與原始問題無關,但程式碼洩漏了資源。為了防止這種情況,應該使用 JDBC 慣用法關閉資源:

try {
    // Acquire resources here
} catch (Exception e) {
    // Handle exception
} finally {
    // Close resources here
}
登入後複製

以上是為什麼我的 Java 中的PreparedStatement 在「?」附近拋出 MySQL 語法錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板