1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > JSP Servlet 实现模糊动态查询并分页(拼接Sql)

JSP Servlet 实现模糊动态查询并分页(拼接Sql)

时间:2023-07-04 22:43:37

相关推荐

JSP Servlet 实现模糊动态查询并分页(拼接Sql)

需求:

根据两个条件查询。

根据查询的结果分页,并记住查询条件。

大体流程是这样的:

第一次打开时,默认分页显示所有信息,这时候点击末页会取到最后一页数据。

当填写或选择了查询条件时,根据条件取出符合条件的所有数据并分页。这时候点击翻页应该都是这一次查询条件后的数据。

我写的时候思绪挺乱的,来这里写一写,再理一下思路。

建表,只需要一张,还有对应的实体类。

写前台展示页面。

<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,默认为1if (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后。还有最好是写一个框架来做这些事,不过对接口,反射的理解还不是太深。加油吧!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。