首頁 >資料庫 >mysql教程 >為什麼 `statement.executeQuery(searchPerson);` 會導致 Java 準備語句中出現 SQL 語法錯誤?

為什麼 `statement.executeQuery(searchPerson);` 會導致 Java 準備語句中出現 SQL 語法錯誤?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-11 15:22:41633瀏覽

Why Does `statement.executeQuery(searchPerson);` Cause a SQL Syntax Error in Java Prepared Statements?

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 字串使用 surnamename 佔位符正確定義 SQL 查詢。 然而,將 searchPerson 直接傳遞給 statement.executeQuery() 是錯誤的根源。 executeQuery() 需要一個準備好的語句 已經 設定了它的參數;它不接受 SQL 字串作為參數。

正確的實作:

解決方案在於執行查詢之前正確綁定參數。 參數綁定後,應在不帶任何參數的情況下呼叫 executeQuery() 方法。 修正後的程式碼如下所示(假設 surnameValuenameValue 儲存實際值):

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

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