我正在開發(fā)一個以 MySQL 作為后端的基于 Java 的桌面應用程序。在此應用程序中有一個名為“搜索”的部分,其中有四個字段 - 關鍵技能(文本字段)、經(jīng)驗(組合框)、城市(組合框)和通知期(組合框)。所有四個字段的值都將在運行時提供。關鍵技能是逗號分隔值。我想要一個使用 LIKE 運算符的 MySQL 查詢,借助它我不必每次都在 Key Skills 文本字段中提供逗號分隔值。我只在運行時提供一個值,然后基于該值,查詢將使用 LIKE 運算符獲取結果。我的查詢?nèi)缦滤疚沂褂昧苏嘉环???因為我的查詢是動態(tài)類型。是否可以在 LIKE 運算符中使用占位符,還是僅適用于靜態(tài)類型查詢?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 '%?%'"; 當我執(zhí)行上述查詢時,它產(chǎn)生了一個錯誤說明 - 您的 SQL 語法有錯誤;檢查與您的 MySQL 服務器版本服務器版本相對應的手冊,以在第 1 行的“FROM Candidate cd JOIN Candidate2 cd2 ON(cd.Mobile = cd2.C_Mobile) WHERE Key_Skills”附近使用正確的語法
3 回答

拉風的咖菲貓
TA貢獻1995條經(jīng)驗 獲得超2個贊
您可以使用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('%', ?, '%')";
當您通過傳遞參數(shù)執(zhí)行上述代碼時,'someskill'
該函數(shù)concat()
將生成此字符串'%someskill%'
,并且該列Key_Skills
將與此連接的字符串進行比較。

幕布斯6054654
TA貢獻1876條經(jīng)驗 獲得超7個贊
您可以在 Java 代碼中添加前綴和后綴,而不是在 SQL 中連接它們。
WHERE Key_Skills LIKE ?";
甚至可能允許通配符:
keySkills = keySkills.replace('*', '%');
keySkills = keySkills.replace('?', '_');
preparedStatement.setString(1, "%" + keySkills + "%");
JDBC 代碼將替換?為準備好的語句值,強制轉換為預期的 SQL 字符串類型。并setString負責轉義撇號和其他人。

皈依舞
TA貢獻1851條經(jīng)驗 獲得超3個贊
使用 concat 您可以like
以一種簡單的方式構建字符串來管理參數(shù)值:
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('%' , ?, '%')";
添加回答
舉報
0/150
提交
取消