JSP Servlet 实现模糊动态查询并分页(拼接Sql)
来源:互联网 发布:日语网络 编辑:程序博客网 时间:2024/06/05 22:31
需求:
根据两个条件查询。
根据查询的结果分页,并记住查询条件。
大体流程是这样的:
第一次打开时,默认分页显示所有信息,这时候点击末页会取到最后一页数据。
当填写或选择了查询条件时,根据条件取出符合条件的所有数据并分页。这时候点击翻页应该都是这一次查询条件后的数据。
我写的时候思绪挺乱的,来这里写一写,再理一下思路。
建表,只需要一张,还有对应的实体类。
写前台展示页面。
<body> <form action="" method="post"> 姓名:<input type="text" name="name"/> 性别: <select name="sex" > <option value="-1">全部</option> <option value="0">男</option> <option value="1">女</option> </select> <input type="submit" value="搜索"/> <table> <tr> <td>序号</td> <td>姓名</td> <td>性别</td> <td>头像</td> <td>职业</td> </tr> <c:forEach items="" var=""> ... </c:forEach> </table> </form> <a href="">首页</a> <a href="">上一页</a> 当前页: <a href="">下一页</a> <a href="">末页</a> </body>
刚进入项目要显示所有,所以可以写个带参数的欢迎页面index.jsp,
response.sendRedirect("person?action=getMaxPage&name=&sex=0");
(name=&sex=-1相当于name=空字符串)。把name和sex传到相应的servlet。现在来写servlet
public String getMaxPage(HttpServletRequest req,HttpServletResponse resp){ resp.setCharacterEncoding("UTF-8"); /* 刚进入项目时index.jsp传来name="" 为空,sex=-1*/ String name = req.getParameter("name"); Integer sex = Integer.valueOf(req.getParameter("sex")); /*第一步,通过条件得到最大页数。要写一个数据访问的Dao,虚线内是该Dao里获取最大页的方法*/ PersonDao pd = new PersonDao(); Integer maxPage = pd.getCount(name, sex, rowPerPage); //rowPerPage是每页要显示的记录条数,可以定义一个全局变量-------------------------------------------------------------------------------------- public Integer getCount(String name,Integer sex,Integer size){ StringBuffer sb = new StringBuffer("select count(*) from person where 1=1 "); ... if(!(name.equals(null)) && !(name.equals("")) ){ sb.append(" and name like '%"+name+"%' "); } if(sex != 0){ sb.append(" and sex = "+sex+" "); } ... }------------------------------------------------------------------------------------------ /*因为还没学Ajax就用session存放条件以记住查询条件*/ HttpSession session = req.getSession(); session.setAttribute("name", name); session.setAttribute("sex", sex); session.setAttribute("maxPage", maxPage); return "person?action=getPerson"; }
- 得到最大页后,再根据条件获取记录
public String getPerson(HttpServletRequest req,HttpServletResponse resp){ PersonDao pd = new PersonDao(); HttpSession session = req.getSession(); //得到选择条件后的最大页,姓名,性别。会根据每次选择条件的不同而改变。 Integer maxPage = (Integer)session.getAttribute("maxPage"); String name = (String)session.getAttribute("name"); Integer sex = (Integer)session.getAttribute("sex"); Integer currPage = 0; //从项目进来后,没有从前台获得currPage,默认为1 if (req.getParameter("currPage") == null) { currPage =1; }else{ //点击上下页的时候找到此servlet,得到页数。------------------------------------------------------------ <a href="person?action=getPerson&currPage=${currPage+1 }">下一页</a>------------------------------------------------------------ currPage = Integer.valueOf(req.getParameter("currPage")); } if(currPage < 1 ){ currPage = 1; } else if(currPage > maxPage){ currPage = maxPage; } //通过name,sex,当前页,每页显示的条数导数据库获取数据。 List<Person> list = pd.getPerson(name, sex, currPage, rowPerPage);--------------------------------------------------------------------------------public List<Person> getPerson(String name, Integer sex,Integer currPage,Integer size){ StringBuffer sb = new StringBuffer("select * from person where 1=1 "); ... //在这里,我们把参数直接传到Dao里面来判断。在我早先写的那篇文章里,是先在servlet判断一次,又到Dao里面判断,实在是多余了。不过"重构代码"不也是一项必须的技能吗。 if(!(name.equals(null)) && !(name.equals("")) ){ sb.append(" and name like '%"+name+"%' "); } if(sex != 0){ sb.append(" and sex = "+sex+" "); } sb.append(" limit ?,? "); String sql = sb.toString();//要注意把sql语句转为String类型。 try { conn = DataBaseUtil.getConnection(); ps = conn.prepareStatement(sql); //这里就只有两个 ‘?’,不用再判断有几个 ‘?’了。 ps.setInt(1, (currPage-1)*size); ps.setInt(2, size); rs = ps.executeQuery(); while(rs.next()){ ... }-------------------------------------------------------------------------------- //把得到的数据,送到前台显示。 if(list.size() > 0){ req.setAttribute("pList", list); req.setAttribute("currPage", currPage); return "showPerson.jsp"; }
早先写的拼接Sql的文章(点我)
Ps:写这篇文章的时候,被打断了了好几次,思路也是断断续续的。不过我会一直更新下去的,在学了Ajax,Jquery后。还有最好是写一个框架来做这些事,不过对接口,反射的理解还不是太深。加油吧!
阅读全文
0 0
- JSP Servlet 实现模糊动态查询并分页(拼接Sql)
- MVC分层+JDBC+数据库+Servlet实现JSP文件上传和显示+模糊查询+分页
- MySQL数据库+jsp+servlet实现分页查询
- servlet+jsp实现分页查询+导出
- jsp+Javabean+servlet实现分页查询
- jfinal动态sql管理简洁实现分页多条件模糊查询
- (13)多条件查询(精确查询、模糊查询):动态拼接sql
- MyBatis模糊查询的sql拼接
- MyBatis 模糊查询-拼接SQL语句
- servlet jsp 实现分页
- 【SQL】拼接SQL语句-参数化查询-模糊查询
- 动态SQL与模糊查询
- 模糊查询与动态sql
- 动态SQL与模糊查询
- MyBatis入门07--实现sql动态模糊查询
- servlet寻找。。。sql分页查询。。。。。
- MyBatis动态查询 模糊查询实例sql
- 关于SQLServer存储过程动态拼接,模糊查询的处理
- 一步一步来
- arpr
- 解决httpclient上传multipart form-data文件失败
- ReactNative进阶---Refs
- 进程间通信
- JSP Servlet 实现模糊动态查询并分页(拼接Sql)
- apache-comnons系列之commons-digester 3.3.2 学习笔记
- Windows屏保程序思考
- ubuntu linux dpkg 处理软件包,出错: 依赖关系问题
- post-removal 报错
- (二分法)【POJ-3104】Drying
- DBUtils用法详解01
- Filezilla拖拽文件出错
- JAVA编程思想学习 — 第六章 (类再生)