java web中的多条件查询
转自:http://blog.csdn.net/xulu_258/article/details/46623317
所谓多条件查询即为用户输入想要查询的条件,然后根据用户输入的条件进行查询。
当用户有可能什么也不输入,这个条件我们应该考虑到。如果不输入就查询,则我们在页面上显示所有的查询结果,
当用户输入一个条件,我们则根据用户输入的这一个条件来进行查询,两个条件,三个条件也是一样,
而这个时候我们就应该考虑一下查询条件是可变的,我们应该怎样根据可变的条件来书写sql语句,我们应该首先会想到if条件语句,如果用户输入,我们就把输入的添加到sql语句中,但是这样的话我们应该考虑到实际情况下,如果突然客户又让我们加一个条件,我们又得重新更改我们的if条件语句,不仅复杂而且浪费时间;
因此我们得重新考虑一种解决方法,可以用StringBuilder来new一个基本的查询语句,例如:"select * from customer(表名) where 1=1",
where 1=1 :就是为了append后面的and语句的,and语句需要在where后面嘛,之后的条件是通过 if 块动态变化的,比如下面这一段代码
要查询的字段有:cname gender cellphone email
首先定义sql的前半段固定代码
"select * from t_customer where 1=1"
当cname选项被选中时,
sql.append(" and cname like ?");
sql查询语句就变成了:
select * from t_customer where 1=1 and cname like ?
当gender也被选中时,sql查询语句就变成了:
select * from t_customer where 1=1 and cname like ? and gender=? 以此类推
public List<Customer> query(Customer criteria) {
try{
//给出sql模板,为了便于后面添加sql语句
StringBuilder sql =new StringBuilder("select * from t_customer where 1=1");
//给出parmas
List<Object> parmas = new ArrayList<Object>();
String cname = criteria.getCname();
if(cname != null && !cname.trim().isEmpty()){
sql.append(" and cname like ?");
parmas.add("%" +cname+ "%");
}
String gender= criteria.getGender();
if(gender != null && !gender.trim().isEmpty()){
sql.append(" and gender=?");
parmas.add(gender);
}
String cellphone= criteria.getCellphone();
if(cellphone != null && !cellphone.trim().isEmpty()){
sql.append(" and cellphone like ?");
parmas.add("%" +cellphone+ "%");
}
String email= criteria.getEmail();
if(email != null && !email.trim().isEmpty()){
sql.append(" and email like ?");
parmas.add("%" +email+ "%");
}
return qr.query(sql.toString(), new BeanListHandler<Customer>(Customer.class),parmas.toArray());
}catch(SQLException e){
throw new RuntimeException(e);
}
}
解决了这个问题,我们就知道了有多少个问号,我们就向集合中添加这个属性,最后执行QueryRunner的query方法即可。
java web中的多条件查询的更多相关文章
- JDBC在Java Web中的应用——分页查询
分页查询 通过JDBC实现分页查询的方法有很多种,而且不同的数据库机制也提供了不同的分页方式,在这里介绍两种非常典型的分页方法. 通过ResultSet的光标实现分页 通过ResultSet的光标实现 ...
- Java web中常见编码乱码问题(一)
最近在看Java web中中文编码问题,特此记录下. 本文将会介绍常见编码方式和Java web中遇到中文乱码问题的常见解决方法: 一.常见编码方式: 1.ASCII 码 众所周知,这是最简单的编码. ...
- 深入分析Java Web中的编码问题
编码问题一直困扰着我,每次遇到乱码或者编码问题,网上一查,问题解决了,但是实际的原理并没有搞懂,每次遇到,都是什么头疼. 决定彻彻底底的一次性解决编码问题. 1.为什么要编码 计算机的基本单元是字节, ...
- Java Web 中使用ffmpeg实现视频转码、视频截图
Java Web 中使用ffmpeg实现视频转码.视频截图 转载自:[ http://www.cnblogs.com/dennisit/archive/2013/02/16/2913287.html ...
- JDBC在Java Web中的应用
JDBC在Java Web中的应用 制作人:全心全意 在Java Web开发中,JDBC的应用十分广泛.通常情况下,Web程序操作数据库都是通过JDBC实现,即使目前数据库方面的开源框架层出不穷,但其 ...
- Redis(十四)Redis 在Java Web 中的应用
在传统的 Java Web 项目中,使用数据库进行存储数据,但是有一些致命的弊端,这些弊端主要来自于性能方面. 由于数据库持久化数据主要是面向磁盘,而磁盘的读/写比较慢,在一般管理系统中,由于不存在高 ...
- Java Web 中 过滤器与拦截器的区别
过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法u ...
- JAVA WEB 中的编码分析
JAVA WEB 中的编码分析 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.src {background-co ...
- Java web中常见编码乱码问题(二)
根据上篇记录Java web中常见编码乱码问题(一), 接着记录乱码案例: 案例分析: 2.输出流写入内容或者输入流读取内容时乱码(内容中有中文) 原因分析: a. 如果是按字节写入或读取时乱码, ...
随机推荐
- 误把Linux运行级别设置为6后的解决方法【转】
本文转载自:http://www.wuji8.com/meta/841011126.html 误把Linux运行级别设置为6后的解决方法 我们知道,Linux有7个运行级别,而运行级别设置为6 ...
- 深入理解JavaScript的变量作用域
在学习JavaScript的变量作用域之前,我们应当明确几点: JavaScript的变量作用域是基于其特有的作用域链的. JavaScript没有块级作用域. 函数中声明的变量在整个函数中都有定义. ...
- arm linux下启动ftp服务
1.环境: /home/jello # uname -aLinux 3.10.0 #2 SMP Mon Mar 6 17:52:09 CST 2017 armv7l GNU/Linux 2.使用tc ...
- 安卓开发 Activity入门
生命周期 Activity包含5种状态,涉及7种方法 1. 启动状态 2. 运行状态 *** 即使内存不足,Android先销毁栈底的Activity,来确保当前Activity正常运行 3. 暂停状 ...
- Ubuntu 14.04 下解决maven访问速度慢问题
参考: maven国内镜像(maven下载慢的解决方法) maven中央仓库访问速度太慢的解决办法 Ubuntu 14.04 下解决maven访问速度慢问题 在启动OVX的时候,由于sh脚本中需要使用 ...
- UVa 11039 设计建筑物
https://vjudge.net/problem/UVA-11039 题意: 有n个绝对值各不相同的非0整数,选出尽量多的数,排成一个序列,使得正负号交替且绝对值递增. 思路:正数存一个数组,负数 ...
- Linux——进程管理简单学习笔记(二)
计划任务: 为什么要设置计划任务 : 实现数据库备份,发送系统通知神马的..... 计划任务的命令: 一: at : 安排作业在某一时刻执行一次 nbatch 安排作业在系统负载不重时执 行一 ...
- Linux——vim/vi 简单学习笔记
Vim/Vi是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器,它的作用是建立.编辑.显示文本文件.Vim/Vi 没有菜单,只有命令. 早前也用过Vim变过C++/C的代码, ...
- Spring 事物机制总结
Spring两种事物处理机制,一是声明式事务,二是编程式事务 声明式事物 1)Spring的声明式事务管理在底层是建立在AOP的基础之上的.其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加 ...
- [ios]cocos2dx获取设备的当前预言
参考:http://blog.sina.com.cn/s/blog_923fdd9b0101fmpv.html http://bbs.9ria.com/thread-199313-1-1.html / ...