簡體   English   中英

如何使用占位符“?” 在 LIKE 運算符中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM