繁体   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