一、.固定条件,直接查询数据库,把结果进行分页显示出来;

见博客

https://blog.csdn.net/qq_37591637/article/details/82951647

二、条件不定,查询数据库,把查询结果进行分页显示

如下图;包含四个条件,用户在选择的时候可以选择一个条件、任意两个条件、三个条件、全部条件进行查询,

思路:

1,jjsp把用户选择的条件参数传递到A.servlet中;

2 在A.servlet中用户选择条件,根据条件组成一个sql语句,把这个没有进行limit ?,?分页的数据传递到一个中介的B.servlet中

3.在B.servlet中,把这个sql语句进行分页查询

遇到的难点:

1.乱码,:

整个过程涉及到:A.servlet传递参数到B.servlet 、  B.servlet传递参数到C.jsp 、C.jsp 传递参数到B.servlet 三个过程

其中  A.servlet传递参数到B.servlet  C.jsp 传递参数到B.servlet 总有一个乱码,怎么处理都不行?总有一个正常一个乱码?

解决方式:

一样的参数,接受的时候用了两个字符串接受,分开处理;

A.servlet

package cn.com.servlet;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.com.pack.*;
public class SearchCondition extends HttpServlet {/*** */private static final long serialVersionUID = 1L;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//这个servlet的主要作用是根据用户的选择才查询出想要的结果String name=request.getParameter("name");if(name!=null&&name!=""){name = URLEncoder.encode(name, "ISO-8859-1");name = URLDecoder.decode(name, "UTF-8");   }String number=request.getParameter("num");if(number!=null&&number!=""){number = URLEncoder.encode(number, "ISO-8859-1");number = URLDecoder.decode(number, "UTF-8");  }String state=request.getParameter("states");state = URLEncoder.encode(state, "ISO-8859-1");state = URLDecoder.decode(state, "UTF-8");String part=request.getParameter("organs");part = URLEncoder.encode(part, "ISO-8859-1");part = URLDecoder.decode(part, "UTF-8");//1.1把收到的信息都存储到一个集合里面,如果是空的就筛选掉,放进一个新的集合//penson(假如你的数据放在对象中)Map<String,String> map =new HashMap<String,String>();String sql =" select * from person_info where 1=1 ";Person_info person=new Person_info();if(name!= null&&name!=""){map.put("name",name);}else if(number!=null&&number!=""){map.put("number",number);}else if(part!=null&&part!=""){if(part.equals("全部")){}else{map.put("part",part);    }}else if(state!=null&&state!=""){if(state.equals("全部")){}else{map.put("state",state);}}Set<String> key = map.keySet(); for (String i : key) {sql=sql+"and "+i+"= '"+map.get(i)+"'";}request.setCharacterEncoding("utf-8");System.out.println("第一次传过去的sql:"+sql);request.getRequestDispatcher("/SearchCondition_Media?sql="+sql).forward(request, response);}}

B.servlet

package cn.com.servlet;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import cn.com.jdbc.JdbcUtils;
import cn.com.pack.Person_info;
@SuppressWarnings("serial")
public class SearchCondition_Media extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 条件查询媒介// 1.数据库里面数据的总条数;int countpage = 0;request.setCharacterEncoding("utf-8");String sql = request.getParameter("sql");String sql1=request.getParameter("sqls");if(sql1!=null&&!("".equals(sql1))){            sql1 = new String (sql1.getBytes("ISO-8859-1"),"UTF-8");System.out.println("sql1:"+sql1);}if(sql==null||"".equals(sql)){sql=sql1;}System.out.println("sql:" + sql);ResultSet rs0 = JdbcUtils.select(sql, null);List<Person_info> list = new ArrayList<Person_info>();// 分页查询try {while (rs0.next()) {countpage++;}} catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}// 每页显示多少行int limt = 10;// 2.如果一页是10条数据的话,那么就是all页int all = (countpage / limt) + 1;// 这个是从前台获取的数据,是上一页还是下一页int cpage = 1;// 这个是上一页还是下一页的数据String currentpage = request.getParameter("currentpage");if (currentpage == null || currentpage == "") {cpage = 1;} else {cpage = Integer.parseInt(currentpage);// 如果到了最后一页,用户再点击下一页的时候跳转到第一页if (cpage == (all + 1)) {cpage = 1;// 如果到了第一页,用户再点击下一页的时候跳转到最后一页} else if (cpage == 0) {cpage = all;}}// 3.开始查询的数据int start = limt * (cpage - 1);// 4.结束查询的数据int end = start + (limt - 1);// 这个代码是查询数据库里面的person_info,然后循环遍历显示在页面上// sql语句的意思就是limit 索引,显示索引以后多少行String sqls = sql + "  limit ?,?";// 如果到了最后一页的时候,if (end > countpage) {limt = countpage - start;}int sz[] = { start, limt };ResultSet rs = JdbcUtils.selectint(sqls, sz);try {while (rs.next()) {Person_info pin = new Person_info(rs.getString(1),rs.getString(2), rs.getString(3), rs.getString(4),rs.getString(5), rs.getString(6));list.add(pin);}request.setAttribute("list", list);request.setAttribute("cpage", cpage);request.setAttribute("all", all);request.setAttribute("address", "/Socket/SearchCondition_Media");request.getRequestDispatcher("/Personnel_definition.jsp?sql="+sql).forward(request, response);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 1.2根据新的集合的来进行查询}}

C.jsp

<div id="center-right">
<!--  人员信息界面-->
<form action="/Socket/SearchCondition" method="post">
<br>
<span class="peo_left">人员名称:<input type="text" name="name"/></span>
<span class="peo_left" style="margin-left: 117px;">人员编号:<input type="text"  name="num"/></span><br>
<span class="peo_left">所属机构:
<select name="organ" id="organ">
<option onclick="organ_se();">所有</option>
<option onclick="organ_se();">公司</option>
<option onclick="organ_se();">新龙项目部</option>
<option onclick="organ_se();">中矿</option>
</select>
</span>
<span class="peo_left">启用状态:
<select id="state">
<option onclick="state_se();">全部</option>
<option onclick="state_se();">启用</option>
<option onclick="state_se();">禁用</option>
</select>
<span><input type="text" id="organs" name="organs" style="display: none;"/>
<input type="text" id="states" name="states" style="display: none;"/></span>
</span>
<span id="button">
<input type="submit" value="查询" class="select"/>
<input type="reset" value="重置" class="select"/>
<input type="button" value="人员报表" class="select"/>
</span>
</form>
<br>
<div id="peo_info" style="height: 259px;">
<table  style="width: 99%;">
<tr><td>人员名称</td><td>人员编号</td><td>所属部门</td><td>所属工种</td><td>职务</td><td>启用状态</td><td><a href="Personnel_add.jsp">【添&nbsp;&nbsp;&nbsp;&nbsp;加】</a></td></tr><c:forEach items="${list}" var="i"  varStatus="status"><c:if test="${status.index % 2 == 0}"><tr style="background-color: white"><td class="list_p">${i.name}</td><td class="list_p">${i.number}</td><td class="list_p">${i.part}</td><td class="list_p">${i.kinds}</td><td class="list_p">${i.duty}</td><td class="list_p">${i.state}</td><td class="list_p"><a href="/Socket/Person_edit?name=${i.name}&&number=${i.number}">【编辑</a>|<a  href="/Socket/Person_delete?name=${i.name}&&number=${i.number}">删除</a>】</td></tr></c:if><c:if test="${status.index % 2 == 1}"><tr style="background-color: #f2f7fa"><td class="list_p">${i.name}</td><td class="list_p">${i.number}</td><td class="list_p">${i.part}</td><td class="list_p">${i.kinds}</td><td class="list_p">${i.duty}</td><td class="list_p">${i.state}</td><td class="list_p"><a href="/Socket/Person_edit?name=${i.name}&&number=${i.number}">【编辑</a>|<a href="/Socket/Person_delete?name=${i.name}&&number=${i.number}">删除</a>】</td></tr></c:if></c:forEach><tr><td><a href="<%=request.getAttribute("address") %>?currentpage=${cpage-1}&&sqls=<%=request.getParameter("sql")%>">上一页</a></td><td>第${cpage}页</td><td><a href="<%=request.getAttribute("address") %>?currentpage=${cpage+1}&&sqls=<%=request.getParameter("sql")%>">下一页</a></td><td>总共<%=request.getAttribute("all") %>页</td></tr>
</table>
</div>
</div>

根据某个条件或者某些条件对数据库进行查询,然后把查询结果进行分页显示相关推荐

  1. 07--MySQL自学教程:DQL(Data Query Language:数据库查询语言)简介、基础查询、条件查询、模糊查询以及排序(一)

    1. DQL(Data Query Language:数据库查询语言)知识点概览 DQL(Data Query Language:数据库查询语言): 用来查询数据(记录),不会对数据进行改变,而是让数 ...

  2. MySQL基础——数据库和SQL概述\MySQL基本使用\DQL语言学习\条件查询\排序查询\常见函数\分组查询\连接查询\子查询\分页查询\联合查询

    本文详细讲解了MySQL中DQL语言,也就是数据查询语句的使用.全文3w余字,是对学习MySQL知识的整理总结,因为篇幅较长,MySQL基础知识余下部分发表在余下博客中 DML语言学习\插入数据\删除 ...

  3. 【数据库】第二章 基础函数、聚合函数、条件查询、子查询和多表查询

    [数据库]第二章 基础函数.条件查询.聚合函数.多表查询和子查询 文章目录 [数据库]第二章 基础函数.条件查询.聚合函数.多表查询和子查询 一.基础函数 二.聚合函数 1.COUNT 2.MAX/M ...

  4. oracle导出数据带where,CSS_指定一个where条件来有条件地导出记录,在Oracle数据库中,exp中的query - phpStudy...

    指定一个where条件来有条件地导出记录 在Oracle数据库中,exp中的query参数可以指定一个where条件来有条件地导出记录, 对于许多不常使用此选项的朋友来说, 经常会遇到下面这样的错误: ...

  5. Oracle数据库:约束行限制where语句,判断条件,比较条件,字符串日期格式,in,like,escape,null语句

    Oracle数据库:约束行限制where语句,判断条件,比较条件,字符串日期格式,in,like,escape,null语句 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很 ...

  6. 数据库:数据查询(指定的列、全部列、经过计算的值、消除重复的行、查询满足条件的元组、比较查询、范围查询、集合查询、字符匹配查询)

    数据查询是数据库的核心操作,SQL提供了 select 语句实现查询功能 1.查询指定的列 格式: select 查询列表,查询列表 from 查询的表名 2.查询全部列(查询的顺序不同) (1) s ...

  7. Mysql数据库入门---数据查询常用方法(包含条件查询和排序查询)

    Mysql数据库入门-数据查询 Author:qyan.li Date:2022.2.21 文章目录 ``Mysql``数据库入门---数据查询 1. ``select``关键字 2.条件查询 3.排 ...

  8. MySQL数据库基础(多表关联查询、内外全连接、复合条件查询、子查询)

    文章目录 一.笛卡尔积查询 二.内.外.全连接查询 三.复合条件查询 四.子查询 五.EXIST判断 本篇文章主要介绍MySQL里的多表关联查询,其中包括了笛卡尔积查询.内连接查询.外连接查询.全连接 ...

  9. oracle 窗口函数查询条件,62.Oracle数据库SQL开发之 高级查询——使用分析函数之窗口函数...

    62.Oracle数据库SQL开发之 高级查询--使用分析函数之窗口函数 窗口函数可以计算一定的记录范围内.一定值域内.或者一段时间内的累积和以及移动平均值.查询返回一组记录,称为结果集.窗口这个术语 ...

最新文章

  1. C# API中的模型和它们的接口设计
  2. python数列求和-加强版_ES6深入浅出-3 三个点运算 新版字符串-1.函数与对象的语法糖...
  3. 国务院办公厅关于2022年部分节假日安排的通知
  4. 最新代理服务器列表 2008-09-2
  5. python如何进阶提升_Python序列操作之进阶篇
  6. dump文件解析之探索.Net的内存
  7. [js] 请使用js实现商品的自由组合,并说说你的思路
  8. 【Python】IDLE工具
  9. 分布式 开源_3个开源分布式跟踪工具
  10. 异常掉电导致的ORA-[kfrValAcd30]故障处理
  11. 敏捷开发一千零一问系列之三:序言及解决问题的心法(共振)
  12. 清华大学刘知远:在深度学习时代用HowNet搞事情
  13. 2009福州数学建模题目及答案
  14. 进程间通信之CreatePipe
  15. html金额自动换算成大写,JavaScript实现将人民币小写金额自动转换成大写的方法...
  16. 冒险岛2计算机内存不足建议使用,冒险岛2游戏设置详解 低配电脑如何流畅运行冒险岛2...
  17. python检测刀具_科研一角|Python语言在人工智能加工中心机器人方面的应用
  18. 程序化交易入门(一)
  19. UniCode编码表,过滤不可见特殊字符
  20. 华为运营商级路由器配置示例 | 公网IPv6 over SRv6 TE Policy

热门文章

  1. Excel自定义序列方法进行排序技巧
  2. 求学者如何借“东风”学好大数据开发?
  3. 红米k40在什么地方取消HD(教程分享)
  4. 2011 imac 固态_iMac 更换 SATA 接口 SSD 固态硬盘拆机详解
  5. 垃圾分类宣传教育——垃圾分类知识竞答活动小程序
  6. su自带模型库怎么打开_解决SketchUp 2014无法打开3D模型库和插件商店的方法
  7. .NET Core/C# 对接成都智慧工地《建筑垃圾运渣车辆视频监控系统》
  8. 《数值分析》-- 牛顿插值
  9. 求生之路2 游戏资料详细与细节
  10. Ping的常见的问题