博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WEB模糊查询注意的问题(排除%等通配符并支持不连续关键字查询)
阅读量:4284 次
发布时间:2019-05-27

本文共 1897 字,大约阅读时间需要 6 分钟。

前段时间我在开发项目的时候,就关于模糊查询遇到了一点问题,主要是有两大问题: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作为搜索内容带到数据库中查询就行了。

转载地址:http://rungi.baihongyu.com/

你可能感兴趣的文章
NESSUS扫描操作指导
查看>>
C语言读取文件大小,载入文件全部内容
查看>>
C语言 static静态变量的作用
查看>>
Linux(C/C++)下的文件操作open、fopen与freopen
查看>>
C语言 文件操作的头文件
查看>>
C语言的常用库函数(dos)之四(dir.h文件下的一些函数)
查看>>
warning: jobserver unavailable: using -j1. Add `+' to parent make rule问题怎么解决
查看>>
防火墙报文转发流程
查看>>
以太坊创始人:17岁的亿万富翁养成记
查看>>
linux下IPTABLES配置详解
查看>>
关于iptables -m选项以及规则的理解
查看>>
linux系统中查看己设置iptables规则
查看>>
一些库函数的使用注意事项
查看>>
IPv6地址自动配置中的有状态(stateful)和无状态(stateless)的区别
查看>>
阿里云 ACP 云安全 题库总结
查看>>
阿里云 ACP 云安全 题库 -- 数据库审计部分
查看>>
GC 回收机制
查看>>
探究 Android MVC、MVP、MVVM 的区别以及优缺点
查看>>
深入分析 Handler 内存泄露
查看>>
解决 windows 文件被占用的问题 -- The action can‘t be completed because the folder is open in another program
查看>>