首頁 > 資料庫 > mysql教程 > 為什麼`s.executeQuery(query)`會導致MySQLSyntaxErrorException'near '?'”?

為什麼`s.executeQuery(query)`會導致MySQLSyntaxErrorException'near '?'”?

Patricia Arquette
發布: 2024-12-23 08:44:10
原創
767 人瀏覽過

Why Does `s.executeQuery(query)` Cause a MySQLSyntaxErrorException

「?」附近的MySQLSyntaxErrorException:使用PreparedStatements解決語法錯誤

在Java中執行PreparedStatements一是可怕的「接近'?'」異常。要了解其原因和解決方案,讓我們深入研究該問題。

問題描述

嘗試執行PreparedStatement會導致MySQLSyntaxErrorException,錯誤代碼為1064,指示語法錯誤。使用 MySQL 查詢瀏覽器取代查詢中的值成功,表示問題出在程式碼中。

相關程式碼

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); // Error
登入後複製

異常

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
登入後複製

解決方法

這個錯誤的根本原因是MySQL遇到未處理的「?」在SQL 查詢中。要解決此問題,請按照下列步驟操作:
  1. 覆蓋的準備好的查詢: 請注意,程式碼覆蓋了PreparedStatements 的預期行為。行 ResultSet rs = s.executeQuery(query);不正確。
  2. 正確執行: 相反,使用無參數的PreparedStatement#executeQuery() 方法正確執行準備好的查詢。
ResultSet rs = s.executeQuery();
登入後複製

附加註意事項

  • 資源外洩:程式碼未正確關閉、語句和結果集。實作 try-with-resources 區塊以避免資源洩漏。

以上是為什麼`s.executeQuery(query)`會導致MySQLSyntaxErrorException'near '?'”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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