[英]How to use placeholder '?' in LIKE operator?
我正在使用 MySQL 作為后端開發基於 Java 的桌面應用程序。 在此應用程序中,有一個名為“搜索”的部分,其中有四個字段 - 關鍵技能(文本字段)、經驗(組合框)、城市(組合框)和通知期(組合框)。 所有四個字段的值都將在運行時提供。 關鍵技能是逗號分隔值。 我想要一個使用 LIKE 運算符的 MySQL 查詢,借助它,我不必每次在關鍵技能文本字段中都提供逗號分隔值。 我只在運行時提供一個值,並根據該值查詢將使用 LIKE 運算符獲取我的結果。 我的查詢如下所示
我使用了占位符 '?' 因為我的查詢是動態類型。 是否可以在 LIKE 運算符中使用占位符,還是僅適用於靜態類型查詢?
String query = "SELECT F_Name, L_Name, Experience, Key_Skills,
FROM Candidate cd
JOIN Candidate2 cd2 ON(cd.Mobile = cd2.C_Mobile)
WHERE Key_Skills LIKE '%?%'";
當我執行上述查詢時,它產生了一個錯誤,說明 - 您的 SQL 語法有錯誤; 檢查與您的 MySQL 服務器版本服務器版本相對應的手冊,以便在第 1 行的“FROM Candidate cd JOIN Candidate2 cd2 ON(cd.Mobile = cd2.C_Mobile) WHERE Key_Skills”附近使用正確的語法
您可以使用concat()
:
String query =
"SELECT F_Name, L_Name, Experience, Key_Skills " +
"FROM Candidate cd JOIN Candidate2 cd2 ON (cd.Mobile = cd2.C_Mobile) " +
"WHERE Key_Skills LIKE concat('%', ?, '%')";
當您通過傳遞參數 say 'someskill'
執行上述代碼時,函數concat()
將生成此字符串'%someskill%'
並且Key_Skills
列將與此連接字符串進行比較。
使用 concat 您可以以一種簡單的方式構建like
字符串來管理參數值:
String query = "SELECT F_Name, L_Name, Experience, Key_Skills
FROM Candidate cd
JOIN Candidate2 cd2 ON(cd.Mobile = cd2.C_Mobile)
WHERE Key_Skills LIKE concat('%' , ?, '%')";
注意,您在key_Skills, FROM
有一個錯誤的逗號 - 您必須將其刪除。
可能是您的列不明確,所以我用完全限定的語法更新了答案。
String query = "SELECT
cd.F_Name
, cd.L_Name
, cd.Experience
, cd.Key_Skills
FROM Candidate cd
INNER JOIN Candidate2 cd2 ON cd.Mobile = cd2.C_Mobile
WHERE cd.Key_Skills LIKE concat('%' , ?, '%')";
您可以在 Java 代碼中使用前綴和后綴,而不是在 SQL 中將它們連接起來。
WHERE Key_Skills LIKE ?";
甚至可能允許通配符:
keySkills = keySkills.replace('*', '%');
keySkills = keySkills.replace('?', '_');
preparedStatement.setString(1, "%" + keySkills + "%");
JDBC 代碼將取代?
帶有准備好的語句值,強制為預期的 SQL 字符串類型。 而setString
負責轉義撇號等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.