最近正处于期末考试周,博客好久没有更新。而且代码也写的比较少所以也不知道有什么好东西分享给大家。在这次的课程设计中老师布置了一个完成信息检索的作业,我是用网页实现的。功能比较简单写了将近半天的时间就完成功能,但是我还有点意犹未尽的感觉所以自己又完善了一下细节。然后我注意到如果在实际开发中,我们要用模糊查询来进行检索那返回的结果中最好是应该把查询条件进行高亮显示的这样也算是提高用户体验。所以知道做什么了之后,马上就想到应该是在封装结果集的时候在返回的字符串结果中添加html元素(哼  我这么机智,肯定分分钟就想到了)。我的思路是在封装RowMapper的时候用已经添加了html元素的字符串替换原来的字符串(String的replace()方法)。原来的字符串也就是传到后台的查询条件。RowMapper获取查询条件的方式我用的是构造方法传参。好 解决问题的基本思路就是这样,下面请看代码:

    private class SearchByResumeRowMapper implements RowMpper<List<Info>> {private String name;public SearchByResumeRowMapper(String name) {this.name = name.replace("%","");}@Overridepublic List<Info> mapperRow(ResultSet rs) throws SQLException {List<Info> list = new ArrayList<Info>();while(rs.next()){Info info = new Info();info.setTypeName(rs.getString("typeName"));info.setAuther(rs.getString("auther"));info.setResume((rs.getString("resume")).replace(name, "<b style=\"color:red\">" + name + "</b>"));info.setOrigin(rs.getString("origin"));info.setPublishDate(rs.getString("publishDate"));info.setTitle(rs.getString("title"));list.add(info);}return list;}}

这里我只贴出来了RowMapper这个类。

这时问题来了,如果我们在页面上的查询条件写成“%”或者是“_”,这时查出来的结果就会出问题。原因是我们没有对模糊查询的特殊字符进行处理,所以对sql进行改进:

SELECT 字段 FROM info WHERE param LIKE ? ESCAPE '\\';

这句sql的ESCAPE的意思是对\后面的一个字符只当成普通字符处理(sql语句中用两个反斜杠是因为转义字符,其实就是一个反斜杠)。比如SELECT 字段 FROM info WHERE param LIKE '%\\%%' ESCAPE '\\';这句话的意思是查询含有%的param字段。(为了避免java转义字符反斜杠造成程序的混乱 这里我们可以用别的字符 比如正斜杠。楼主这里用的是反斜杠)。下面是改良过后的代码:

在servlet里对特殊字符进行处理

content = content.replace("\\", "\\\\");
content = content.replace("_", "\\_");
content = content.replace("%", "\\%");
content = content.replace("[", "\\[");
content = content.replace("]", "\\]");

然后下边是改良后的RowMapper

    private class SearchByResumeRowMapper implements RowMpper<List<Info>> {private String name;public SearchByResumeRowMapper(String name) {String tmp = name.substring(1,name.length()-1); //deal the "_","%","[","]","\" in result and the sequence can't be changed!//English of Chinese boy... sorry...tmp = tmp.replace("\\_", "_");tmp = tmp.replace("\\%", "%");tmp = tmp.replace("\\[", "["); tmp = tmp.replace("\\]", "]");tmp = tmp.replace("\\\\", "\\");this.name = tmp;}@Overridepublic List<Info> mapperRow(ResultSet rs) throws SQLException {List<Info> list = new ArrayList<Info>();while(rs.next()){Info info = new Info();info.setTypeName(rs.getString("typeName"));info.setAuther(rs.getString("auther"));info.setResume((rs.getString("resume")).replace(name, "<b style=\"color:red\">" + name + "</b>"));info.setOrigin(rs.getString("origin"));info.setPublishDate(rs.getString("publishDate"));info.setTitle(rs.getString("title"));list.add(info);}return list;}}

当然了 这只是一个很简单的小功能,但是觉得收获也挺大的,所以记录一下。

把代码放到github上了,有兴趣的可以看看,并不是正经项目就是一个课设。所以代码有些简陋。。。

点击查看代码

实现模糊查询时对特殊字符进行处理和对查询结果进行处理相关推荐

  1. mysql索引三个字段查询两个字段_mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?...

    情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引? 根据查询字段的位置不同来决定,如查询a,     a,b    a,b, ...

  2. mysql 关联索引_mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?...

    情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引? 根据查询字段的位置不同来决定,如查询a,     a,b    a,b, ...

  3. mysql索引三个字段查询两个字段_mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?......

    情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引? 根据查询字段的位置不同来决定,如查询a,     a,b    a,b, ...

  4. mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?...

    情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引? 根据查询字段的位置不同来决定,如查询a,     a,b    a,b, ...

  5. MySQL工作笔记-建表时为Float型数据确定精度,查询时精度显示,多列之和查询

    目录 建表时设置精度 查询时设置精度 查询多列之和 建表时设置精度 首先是建表时为float类型设置精度: SQL代码如下: CREATE TABLE `testtable` (`id` int(11 ...

  6. mysql查询时给字段加内容,mysql数据库查询之对应库对应表中的注释信息查询以及加字段查询...

    select * from information_schema.columns where table_schema = 'db' #表所在数据库 and table_name = 'tablena ...

  7. sequelize模型关联_关于Sequelize连接查询时inlude中model和association的区别详解

    前言 大家都知道在使用Sequelize进行关系模型(表)间连接查询时,我们会通过model/as来指定已存在关联关系的连接查询模型,或是通过association来直接指定连接查询模型关系.那么,两 ...

  8. mysql查询报错2014_mysql Hibernate 查询时用别名报错

    mysqlHibernate查询时用别名报错在mysql查询工具中,能正常执行SQL:SELECTROLE_IDASVALUE,SNAMEASTESTFROMSYS_ROLEORDERBYROLE_I ...

  9. 使用sqlhelper类查询时假如不需要参数化,那到时SqlParameter这个传参怎么处理

    发表于: 2015-04-25 22:53:31 我在学写SqlHelper类.用SqlParameter[]数组做为参数. 我按条件查询时,可以弄个参数化 但是查询时假如并不需要参数化,那到时Sql ...

最新文章

  1. 自己写的内存池Slabs
  2. asp.net 点击查询跳转到查询结果页面_个体户如何办理和查询定期定额业务?
  3. 【鸿蒙 HarmonyOS】UI 组件 ( 单选按钮 | RadioButton 与 RadioContainer 组件 )
  4. my current understanding of learning and graduate studies
  5. mysql 并行 更新_MySQL 并行复制(MTS) 从库更新的记录不存在实际却存在
  6. Nmap参数--探索网络
  7. java 同步的方法_关于Java中的同步方法
  8. uva 10118 ——Free Candies
  9. html input p,我想在input.phtml中创建下拉框。 (不要使用zend_form)
  10. 去除小圆点_去除li小圆点以及解决其空格问题
  11. Linux下安装配置Nexus
  12. 风靡全球的GANs:一文看尽这“混世魔王”的“三生三世”
  13. OFDM中保护间隔与循环前缀抵抗ISI…
  14. python中ndarray除_Numpy 基本除法运算和模运算
  15. 一级b类计算机考试题目和类型,第五章计算机一级B类高职考试习题资料.doc
  16. android 绕过动态权限,android绕过permission验证及fork进程权限提升
  17. 使用gooflow和easyui做的一个工作流程配置图
  18. PE安装win10系统
  19. Can‘t bind to ‘ngForOf‘ since it isn‘t a known property of ‘xxx‘
  20. Google Java Style 中文版

热门文章

  1. 个人博客系列【Hexo】——git 使用ssh协议免密登录
  2. Codeforces Round #717 (Div. 2)(ABCD)
  3. OC中category(分类)中添加属性
  4. 视频教程-爱上axure之 交互制作-Axure
  5. 168 PHP中Notice: iconv(): Unknown error (84) 的解决办法
  6. 【AE模板】扁平化MG动画卡通人物解说角色场景元素包
  7. java 日期相差月数_Java 计算两个日期之间相差的月数
  8. 配置apache以fastcgi运行php
  9. 【java基础面向对象】方法的重写、 package和import包、访问控制修饰符,static,final,static final,抽象方法
  10. 离谱:火狐浏览器重启后插件,书签,浏览记录全部没了???