Java 準備語句:使用「?」排除 SQL 語法錯誤佔位符
使用 Java 的預先準備語句通常會導致「SQL 語法錯誤」訊息,這通常是由於不正確的佔位符 (?
) 使用造成的。 讓我們來看一個常見的場景:
以下 Java 程式碼片段示範了錯誤的方法:
<code class="language-java">String searchPerson = "select * from persons where surname like ? and name like ?"; statement.executeQuery(searchPerson); </code>
searchPerson
字串使用 surname
和 name
佔位符正確定義 SQL 查詢。 然而,將 searchPerson
直接傳遞給 statement.executeQuery()
是錯誤的根源。 executeQuery()
需要一個準備好的語句 已經 設定了它的參數;它不接受 SQL 字串作為參數。
正確的實作:
解決方案在於在執行查詢之前正確綁定參數。 參數綁定後,應在不帶任何參數的情況下呼叫 executeQuery()
方法。 修正後的程式碼如下所示(假設 surnameValue
和 nameValue
儲存實際值):
<code class="language-java">String searchPerson = "select * from persons where surname like ? and name like ?"; PreparedStatement statement = connection.prepareStatement(searchPerson); statement.setString(1, surnameValue); statement.setString(2, nameValue); ResultSet rs = statement.executeQuery(); // Execute without additional parameters // Process the ResultSet (rs) here</code>
修改後的程式碼先建立一個 PreparedStatement
對象,然後使用 setString()
設定參數值,最後使用 executeQuery()
執行查詢,而無需 再次傳遞 SQL 字串。這可確保資料庫正確解釋佔位符並避免語法錯誤。
以上是為什麼 `statement.executeQuery(searchPerson);` 會導致 Java 準備語句中出現 SQL 語法錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!