前段時間我在開發項目的時候,就關於模糊查詢遇到了一點問題,主要是有兩大問題:一、通配符問題;二、不連續關鍵字查詢。下面我一一說出我是怎麼解決的:html
一、統配符問題sql
好比說在搜索框中輸入'%'、'_'、'/'時會出錯,由於這些特殊符號在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了,代碼以下:post
String keyword = request.getParameter("keyword");
String keyword1 = "";
if (!"".equals(keyword) && keyword != null) {
keyword1 = CommonUtils.specialStr(request.getParameter("keyword"));// 排除%等通配符spa
}最後將keyword1做爲搜索內容帶到數據庫中查詢就好了。.net
二、不連續關鍵字查詢htm
當在搜索框中輸入不連續的關鍵字時,也能從數據庫中搜索的到該內容,就好比:我想搜索公司名稱爲阿里巴巴的數據信息時,我輸入阿巴也能搜索的到阿里巴巴,這該怎麼處理呢?其實很簡單,也是寫一個工具類,將搜索框中的字符串每兩個字符之間都加上一個‘%’就ok了,具體代碼以下:blog
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();
}ci
一樣在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做爲搜索內容帶到數據庫中查詢就好了。