模糊查询(排除%等通配符并支持不连续关键字查询)
前段時間我在開發項目的時候,就關于模糊查詢遇到了一點問題,主要是有兩大問題: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://www.cnblogs.com/gaopengfirst/p/8316726.html
https://blog.csdn.net/PacosonSWJTU/article/details/51425546
總結
以上是生活随笔為你收集整理的模糊查询(排除%等通配符并支持不连续关键字查询)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10.10 traceroute:追踪数
- 下一篇: Sonar理论篇