在like语句查询中,有一些特殊字符需要注意,否则会出现查询结果不符的问题:
1、 '
:用于包裹搜索条件,需转为\'
2、 %
:用于代替任意数目的任意字符,需转换为\%
3、 _
:用于代替一个任意字符,需转换为\_
4、 \
:转义符号,需转换为\\
对应转义工具类:
/**
* 转义工具
*/
public class EscapeUtil {
/**
* like转义
*
* @param str
* @return
*/
public static String likeEscape(String str) {
if (str != null && !"".equals(str)) {
return str.replaceAll("[('%_\\\\)]", "\\\\$0");
}
return str;
}
public static void main(String[] args) {
String str = "abc'%_\\d";
System.out.println("转义前:" + str);
System.out.println("转义后:" + EscapeUtil.likeEscape(str));
System.out.println("无转义:" + EscapeUtil.likeEscape("abcd"));
}
}
测试结果:
转义前:abc'%_\d
转义后:abc\'\%\_\\d
无转义:abcd
说明:
转义部分代码我直接使用正则进行替换,因为本身\
是java和正则的转义符,所以在正则中一个\
需要使用4个\
代替。