模糊查询中输入通配符的问题

模糊查询中输入通配符的问题:

比如说在搜索框中输入‘%‘、‘_‘、‘/‘时会出错,因为这些特殊符号在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作为搜索内容带到数据库中查询就行了。

原文地址:https://www.cnblogs.com/gxyandwmm/p/11217235.html

时间: 2024-10-06 16:04:10

模糊查询中输入通配符的问题的相关文章

Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办--转自http://www.jb51.net/article/88236.htm

这篇文章主要介绍了Mybatis使用MySQL模糊查询时输入中文检索不到结果的解决办法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 项目开发中,在做Mybatis动态查询时,遇到了一个问题:MySQL在进行LIKE模糊查询时,输入英文可以正常检索出结果,但是输入中文后检索得到的结果为空. 由于是使用GET方式请求,所以为了确保中文不乱码,在控制台接收到请求参数后,对中文进行了一次编码. ? 1 2 3 4 5 try { realName = new String(realNam

MyBatis Plus之like模糊查询中包含有特殊字符(_、\、%)

传统的解决思路:自定义一个拦截器,当有模糊查询时,模糊查询的关键字中包含有上述特殊字符时,在该特殊字符前添加\进行转义处理. 新的解决思路:将like 替换为 MySQL内置函数locate函数 一.问题提出 使用MyBatis中的模糊查询时,当查询关键字中包括有_.\.%时,查询关键字失效. 二.问题分析 1.当like中包含_时,查询仍为全部,即 like '%_%'查询出来的结果与like '%%'一致,并不能查询出实际字段中包含有_特殊字符的结果条目2.like中包括%时,与1中相同3.

MySQL模糊查询中通配符的转义

sql中经常用like进行模糊查询,而模糊查询就要用到百分号“%”,下划线“_”这些通配符,其中“%”匹配任意多个字符,“_”匹配单个字符. 如果我们想要模糊查询带有通配符的字符串,如“60%”,“user_name”,就需要对通配符进行转义.如下,斜杠后面的%就不再是通配符,斜杠之前的%仍然起通配符作用. select percent from score where percent like '%0/%' escape '/';

mybatis中llike模糊查询中#和$的使用,以及bind标签的使用

关于#{}和${}就是jdbc中的预编译和非预编译 1.表达式: name like"%"#{name}"%" 打印的日志 ==>  Preparing: select * from user WHERE name like"%"?"%" ==>Parameters: 傻(String), 1(Integer) 能够查询出来,没有问题,这是使用了占位符来占位,写成SQL就是: name like "%&q

Oracle 数据库中在使用中文模糊查询时输入中文查询不到结果的解决方法

添加环境变量 变量名:NLS_LANG 变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

关于mybatis中llike模糊查询中#和$的使用

在mybatis中经常要写到like 查询,以前从来没有遇到什么问题,突然遇到一个问题,找了好长时间没找到,最后找到了,是关于#和$的使用的,总结如下: name like  表达式    and    falg=#{falg} 本次示例中共两个条件,一个是name  like  表达式, 还有flag相等,这个是使用#{}占位符,没有任何问题,关键问题就是 表达式的书写.下面来研究下表达式的书写: 如果写成'%#{name}%' ,就会报错Parameter index out of rang

oracle 模糊查询中的转义字符用法

drop view aaa; create view aaa as select '_BCDE' A FROM DUAL UNION ALL SELECT 'ABCDE' FROM DUAL UNION ALL SELECT 'ACBDE' FROM DUAL; SELECT A FROM AAA WHERE A LIKE '_BCD%'; select a from aaa where a like '\_BCD%' ESCAPE '\'; ESCAPE 后面的字符表示是一个检索字符, 字符串

聚合函数:sum,avg,max,min,count;模糊查询;排序

----聚合函数 --做计算 做统计 对null过滤:null是指不知道什么值,所以无法做计算--sum(参数):统计和--avg(参数):求平均值--max(参数):最大值--min(参数):最小值--count(参数):获取满足条件的记录数--1.获取学员总人数select COUNT(Email) from Student--2.获取最大的年龄值 年龄值越大,年龄越小 年龄值越小,年龄越大select MAX(BornDate) from Studentselect min(BornDat

10.模糊查询

---带条件的查询--- --语法:select 字段列表/* from 表列表where 条件.. select * from Student where ClassId=1 or ClassId=2 or ClassId=3 --使用in代表一个具体的值范围,in要求指定的范围的数据类型一致 select * from Student where ClassId in(1,2,3) select * from Student where ClassId not in(1,2,3) --所谓类