我正在使用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候选cd联接Candidate2 cd2 ON(cd.Mobile = cd2.C_Mobile)WHERE Key_Skills”附近使用
答案 0 :(得分: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('%', ?, '%')";
通过传递参数'someskill'
执行上述代码时,函数concat()
将产生此字符串'%someskill%'
,列Key_Skills
将与此串联的字符串进行比较
答案 1 :(得分:2)
使用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中使用了错误的逗号,必须将其删除
请问您是否有歧义栏,所以我已使用完全合格的sintax更新了答案
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('%' , ?, '%')";
答案 2 :(得分:2)
您可以在Java代码中执行前缀和后缀,而不是在SQL中将它们串联起来。
WHERE Key_Skills LIKE ?";
甚至允许使用通配符:
keySkills = keySkills.replace('*', '%');
keySkills = keySkills.replace('?', '_');
preparedStatement.setString(1, "%" + keySkills + "%");
JDBC代码将?
替换为已准备好的语句值,并强制
到所需的SQL字符串类型。 setString
负责转义撇号和其他字符。