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

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

Linda Hamilton
Linda Hamilton原創
2024-12-06 19:24:12867瀏覽

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中文網其他相關文章!

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