嘗試在 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!
雖然與原始問題無關,但程式碼洩漏了資源。為了防止這種情況,應該使用 JDBC 慣用法關閉資源:
try { // Acquire resources here } catch (Exception e) { // Handle exception } finally { // Close resources here }
以上是為什麼我的 Java 中的PreparedStatement 在「?」附近拋出 MySQL 語法錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!