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