首頁 > Java > java教程 > 為什麼我的PreparedStatement會導致MySQL出現「您的SQL語法錯誤」例外狀況?

為什麼我的PreparedStatement會導致MySQL出現「您的SQL語法錯誤」例外狀況?

Linda Hamilton
發布: 2024-12-06 19:24:12
原創
864 人瀏覽過

Why Does My PreparedStatement Result in a

使用PreparedStatement時,您的SQL語法有錯誤

問題:

使用PreparedStatement ,出現MySQLSyntaxErrorException 並帶有錯誤訊息:「您的SQL語法有錯誤...附近'? 或MemberName = ?'."

代碼:

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

原因:

原因:

原因:

String query = "select MemberID, MemberName from members where MemberID = :member_id or MemberName = :member_name";
登入後複製

原因:

s.setString("member_id", "2");
s.setString("member_name", "zen");
登入後複製

原因:

原因:

原因:語法錯誤是由SQL 查詢中的問號(?)所造成的。 MySQL 將其解釋為字面上的問號,而不是參數佔位符。這會導致 SQL 語法無效。 解決方案:要解決此問題,請將 SQL 查詢中的問號替換為命名參數。這將允許PreparedStatement正確綁定參數值:在Java程式碼中,使用PreparedStatement#setString方法設定命名參數:或者,您可以使用無參數s .executeQuery() 方法而不是s.executeQuery(query)來防止用原始查詢覆蓋準備好的查詢資源洩漏:請注意,提供的程式碼有資源外洩問題。 Connection、Statement 和 ResultSet 物件應在 finally 區塊中關閉,以防止資源耗盡。

以上是為什麼我的PreparedStatement會導致MySQL出現「您的SQL語法錯誤」例外狀況?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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