模糊查询(排除%等通配符并支持不连续关键字查询)

模糊查询(排除%等通配符并支持不连续关键字查询)前段时间我在开发项目的时候,就关于模糊查询遇到了一点问题,主要是有两大问题:1、通配符问题;2、不连续关键字查询。下面我一一说出我是怎么解决的:1、统配符问题比如说在搜索框中输入'%'、'_'、'/'时会出错,因为这些特殊符号在sql语句查询的时候

大家好,欢迎来到IT知识分享网。模糊查询(排除%等通配符并支持不连续关键字查询)

前段时间我在开发项目的时候,就关于模糊查询遇到了一点问题,主要是有两大问题:1、通配符问题;2、不连续关键字查询。下面我一一说出我是怎么解决的:

1、统配符问题

比如说在搜索框中输入’%’、’_’、’/’时会出错,因为这些特殊符号在sql语句查询的时候是有他特定的意义的,所有这里要对前台传过来的keyword搜索内容进行排除通配符处理,我是在工具类中写了一个方法代码如下:

/**
* 根据搜索特殊字符串
* @param id
* @return 取不到返回null
*/
public static String specialStr(String str){
Integer index=str.indexOf(“%”);
Integer index1=str.indexOf(“_”);
Integer index2=str.indexOf(“/”);
StringBuffer stringBuffer = new StringBuffer(str);
if(index!=-1) {
stringBuffer.insert(index, “\\”);
}
if(index1!=-1) {
stringBuffer.insert(index1, “\\”);
}
if(index2!=-1) {
stringBuffer.insert(index2, “\\”);
}
return stringBuffer.toString();

}

然后在controller层导入该工具类,使用specialStr方法就ok了,代码如下:

String keyword = request.getParameter(“keyword”);
String keyword1 = “”;
if (!””.equals(keyword) && keyword != null) {
keyword1 = CommonUtils.specialStr(request.getParameter(“keyword”));// 排除%等通配符

}最后将keyword1作为搜索内容带到数据库中查询就行了。

2、不连续关键字查询

当在搜索框中输入不连续的关键字时,也能从数据库中搜索的到该内容,就比如:我想搜索公司名称为阿里巴巴的数据信息时,我输入阿巴也能搜索的到阿里巴巴,这该怎么处理呢?其实很简单,也是写一个工具类,将搜索框中的字符串每两个字符之间都加上一个‘%’就ok了,具体代码如下:

public static String specialStrKeyword(String str){
if(str==null||str==””){
return null;
}
StringBuffer stringBuffer = new StringBuffer(str);
int length=str.length();
for (int i = 0; i <length; i++) {
char chari=stringBuffer.charAt(i); 
if(i==0){
if(chari==’%’||chari==’_’||chari==’\\’){
stringBuffer.insert(i, “\\”);
i++;
length++;
}
}else{
if(chari==’%’||chari==’_’||chari==’\\’){
stringBuffer.insert(i, “%\\”);
i+=2;
length+=2;
}else{
stringBuffer.insert(i, “%”);
i++;
length++;
}
}
}
return stringBuffer.toString();

}

同样在controller层导入该工具类,使用specialStrKeyword方法就ok了,代码如下:

String keyword = request.getParameter(“keyword”);
String keyword1 = ”;
if (!””.equals(keyword) && keyword != null) {
keyword1 = CommonUtils.specialStr(request.getParameter(“keyword”));// 排除%等通配符
keyword1 = CommonUtils.specialStrKeyword(keyword1);
}

最后将keyword1作为搜索内容带到数据库中查询就行了。

 
模糊查询(排除%等通配符并支持不连续关键字查询)
 
 
https://blog.csdn.net/PacosonSWJTU/article/details/51425546
 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/33054.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信