問題:
使用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中文網其他相關文章!