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

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

Mary-Kate Olsen
發布: 2025-01-11 15:22:41
原創
574 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板