jsp+servlet实现模糊查询和分页效果

Posted 风尘小白沙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jsp+servlet实现模糊查询和分页效果相关的知识,希望对你有一定的参考价值。

---恢复内容开始---

1.DAO+MVC包

2.DAO接口方法定义

package com.wanczy.dao;

import java.math.BigDecimal;
import java.util.List;

import com.wanczy.pojo.CustomerResourcePOJO;

public interface CustomerResourceDAO {
 /**
  *
  * @param sName学校名称
  * @param cLevel合作等级
  * @param cState合作状态
  * @param pageSize一页显示数据的笔数
  * @param pageCurrent显示的页数
  * @return
  */
 //根据名字水平状态来查询数据,传入页数及当前页数
 public List<CustomerResourcePOJO> findByNameLevelState (String sName,int cLevel,int cState,int pageSize,int pageCurrent);
 //查询数据笔数
 public int findCountByNameLevelState(String sName,int cLevel,int cState);
 //查询单笔数据
 public  CustomerResourcePOJO findByCId(BigDecimal cID);
 //修改
 public boolean doUpd(CustomerResourcePOJO pojo);
 //新增
 public boolean doIns(CustomerResourcePOJO pojo);
 //删除
 public boolean doDel(BigDecimal cID);
}

3.DAO接口方法实现方法

package com.wanczy.dao.impl;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.wanczy.dao.CustomerResourceDAO;
import com.wanczy.pojo.CustomerResourcePOJO;

public class CustomerResourceDAOImpl implements CustomerResourceDAO {
 Connection conn ;
 public CustomerResourceDAOImpl(Connection conn){
  this.conn = conn;
 }
 public boolean doDel(BigDecimal cID) {
  boolean flag = false;
  PreparedStatement pstate = null;
  try {
   this.conn.setAutoCommit(false);
   String sql = "delete from customer_resource where c_id = ?";
   pstate = this.conn.prepareStatement(sql);
   pstate.setBigDecimal(1, cID);
   pstate.execute();//执行
   this.conn.commit();
   flag = true;
  } catch (Exception e) {
   e.printStackTrace();
   try {
    this.conn.rollback();
   } catch (Exception e2) {
    e2.printStackTrace();
    // TODO: handle exception
   }
   // TODO: handle exception
  } finally{
   try {
    pstate.close();
   } catch (Exception e2) {
    e2.printStackTrace();
    // TODO: handle exception
   }
  }
  return flag;
 }

 public boolean doIns(CustomerResourcePOJO pojo) {
  boolean flag = false;
  PreparedStatement pstate = null;
  try {
   this.conn.setAutoCommit(false);
   String sql = "insert into customer_resource (c_id, s_name, s_add, " +
      "s_link_man, s_link_tel, c_level, c_state ,s_leader, s_leader_tel)" +
      "values(scott_squence.nextval,?,?,?,?,?,?,?,?)";
   pstate = this.conn.prepareStatement(sql);
   pstate.setString(1,pojo.getSname());
   pstate.setString(2,pojo.getSadd());
   pstate.setString(3,pojo.getSlinkMan());
   pstate.setString(4,pojo.getSlinkTel());
   pstate.setInt(5,pojo.getClevel());
   pstate.setInt(6,pojo.getCstate());
   pstate.setString(7,pojo.getSleader());
   pstate.setString(8,pojo.getSleaderTel());
   pstate.execute();//执行
   this.conn.commit();
   flag = true;
  } catch (Exception e) {
   e.printStackTrace();
   try {
    this.conn.rollback();
   } catch (Exception e2) {
    e2.printStackTrace();
    // TODO: handle exception
   }
   // TODO: handle exception
  } finally{
   try {
    pstate.close();
   } catch (Exception e2) {
    e2.printStackTrace();
    // TODO: handle exception
   }
  }
  return flag;
 }

 public boolean doUpd(CustomerResourcePOJO pojo) {
  boolean flag = false;
  PreparedStatement pstate = null;
  try {
   this.conn.setAutoCommit(false);
   String sql = "update  customer_resource set s_name=?, s_add=?, " +
      " s_link_man=?, s_link_tel=?, c_level=?, c_state=? ,s_leader=?, s_leader_tel=? where" +
      " c_id = ?";
   pstate = this.conn.prepareStatement(sql);
   pstate.setString(1,pojo.getSname());
   pstate.setString(2,pojo.getSadd());
   pstate.setString(3,pojo.getSlinkMan());
   pstate.setString(4,pojo.getSlinkTel());
   pstate.setInt(5,pojo.getClevel());
   pstate.setInt(6,pojo.getCstate());
   pstate.setString(7,pojo.getSleader());
   pstate.setString(8,pojo.getSleaderTel());
   pstate.setBigDecimal(9, pojo.getCid());
   pstate.execute();//执行
   this.conn.commit();
   flag = true;
  } catch (Exception e) {
   e.printStackTrace();
   try {
    this.conn.rollback();
   } catch (Exception e2) {
    e2.printStackTrace();
    // TODO: handle exception
   }
   // TODO: handle exception
  } finally{
   try {
    pstate.close();
   } catch (Exception e2) {
    e2.printStackTrace();
    // TODO: handle exception
   }
  }
  return flag;
 }

 public CustomerResourcePOJO findByCId(BigDecimal cID) {
  CustomerResourcePOJO pojo = null;
  PreparedStatement pstate = null;
  ResultSet res = null;
  try {
   String sql = "select  s_name, s_add, " +
      "s_link_man, s_link_tel, c_level, c_state ,s_leader, s_leader_tel  from customer_resource where c_id = ?";
   pstate = this.conn.prepareStatement(sql);
   pstate.setBigDecimal(1, cID);
   res = pstate.executeQuery();
   while(res.next()){
    pojo = new CustomerResourcePOJO(cID,res.getString(1),res.getString(2),
      res.getString(3),res.getString(4),res.getInt(5),res.getInt(6),
      res.getString(7),res.getString(8));
    
   }
  } catch (Exception e) {
   e.printStackTrace();
   // TODO: handle exception
  } finally{
   try {
    res.close();
    pstate.close();
   } catch (Exception e2) {
    e2.printStackTrace();
   }
  }
  return pojo;
 }

 public List<CustomerResourcePOJO> findByNameLevelState(String sName,
   int cLevel, int cState, int pageSize, int pageCurrent) {
  List<CustomerResourcePOJO> list = new ArrayList<CustomerResourcePOJO>();
  PreparedStatement pstate = null;
  ResultSet res = null;
  try {
   StringBuffer sql = new StringBuffer();
   sql.append("select c_id,s_name, s_add, s_link_man, "+
   " s_link_tel, c_level, c_state ,s_leader,  "+
   " s_leader_tel from (select  c_id,s_name, s_add, s_link_man,  "+
   " s_link_tel, c_level, c_state ,s_leader,  "+
   " s_leader_tel ,rownum abc  "+
   " from customer_resource where s_name like ? ");
   if(cLevel != 0){
    sql.append(" and c_level = "+cLevel);
   }
   if(cState != 0){
    sql.append(" and c_state = "+cState);
   }
   sql.append(" ) where abc>? and abc<=? order by c_level,c_state");
   pstate = this.conn.prepareStatement(sql.toString());
   pstate.setString(1, "%"+sName+"%");
   pstate.setInt(2, (pageCurrent-1)*pageSize);
   pstate.setInt(3, pageCurrent*pageSize);
   res = pstate.executeQuery();
   while(res.next()){
    CustomerResourcePOJO pojo = new CustomerResourcePOJO(res.getBigDecimal(1),res.getString(2),res.getString(3),
      res.getString(4),res.getString(5),res.getInt(6),res.getInt(7),
      res.getString(8),res.getString(9));
    list.add(pojo);
    
   }
  } catch (Exception e) {
   e.printStackTrace();
   // TODO: handle exception
  } finally{
   try {
    res.close();
    pstate.close();
   } catch (Exception e2) {
    e2.printStackTrace();
   }
  }
  return list;
 }
//查询单笔数据
 public int findCountByNameLevelState(String sName, int cLevel, int cState) {
  int count = 0;
  PreparedStatement pstate = null;
  ResultSet res = null;
  try {
   StringBuffer sql = new StringBuffer();
   sql.append("select count(c_id) from customer_resource where s_name like ? ");
   if(cLevel != 0){
    sql.append(" and c_level = "+cLevel);
   }
   if(cState != 0){
    sql.append(" and c_state = "+cState);
   }
   pstate = this.conn.prepareStatement(sql.toString());
   pstate.setString(1, "%"+sName+"%");
   res = pstate.executeQuery();
   while(res.next()){
    count = res.getInt(1);
   }
  } catch (Exception e) {
   e.printStackTrace();
   // TODO: handle exception
  } finally{
   try {
    res.close();
    pstate.close();
   } catch (Exception e2) {
    e2.printStackTrace();
   }
  }
  return count;
 }

}

 

4.Pojo实体类(数据库里的字段)

package com.wanczy.pojo;

import java.io.Serializable;
import java.math.BigDecimal;

public class CustomerResourcePOJO implements Serializable {
 private BigDecimal cid;
 private String sname;
 private String sadd;
 private String slinkMan;
 private String slinkTel;
 private int clevel;
 private int cstate;
 private String sleader;
 private String sleaderTel;
 public BigDecimal getCid() {
  return cid;
 }
 public void setCid(BigDecimal cid) {
  this.cid = cid;
 }
 public String getSname() {
  return sname;
 }
 public void setSname(String sname) {
  this.sname = sname;
 }
 public String getSadd() {
  return sadd;
 }
 public void setSadd(String sadd) {
  this.sadd = sadd;
 }
 public String getSlinkMan() {
  return slinkMan;
 }
 public void setSlinkMan(String slinkMan) {
  this.slinkMan = slinkMan;
 }
 public String getSlinkTel() {
  return slinkTel;
 }
 public void setSlinkTel(String slinkTel) {
  this.slinkTel = slinkTel;
 }
 public int getClevel() {
  return clevel;
 }
 public void setClevel(int clevel) {
  this.clevel = clevel;
 }
 public int getCstate() {
  return cstate;
 }
 public void setCstate(int cstate) {
  this.cstate = cstate;
 }
 public String getSleader() {
  return sleader;
 }
 public void setSleader(String sleader) {
  this.sleader = sleader;
 }
 public String getSleaderTel() {
  return sleaderTel;
 }
 public void setSleaderTel(String sleaderTel) {
  this.sleaderTel = sleaderTel;
 }
 //一般构造方法都要写一个带id和一个不带id的,还有一个无参的,方便后面的增删改查以及方法的调用
 public CustomerResourcePOJO(BigDecimal cid, String sname, String sadd,
   String slinkMan, String slinkTel, int clevel, int cstate,
   String sleader, String sleaderTel) {
  super();
  this.cid = cid;
  this.sname = sname;
  this.sadd = sadd;
  this.slinkMan = slinkMan;
  this.slinkTel = slinkTel;
  this.clevel = clevel;
  this.cstate = cstate;
  this.sleader = sleader;
  this.sleaderTel = sleaderTel;
 }
 public CustomerResourcePOJO( String sname, String sadd,
   String slinkMan, String slinkTel, int clevel, int cstate,
   String sleader, String sleaderTel) {
  super();
  this.sname = sname;
  this.sadd = sadd;
  this.slinkMan = slinkMan;
  this.slinkTel = slinkTel;
  this.clevel = clevel;
  this.cstate = cstate;
  this.sleader = sleader;
  this.sleaderTel = sleaderTel;
 }
 public CustomerResourcePOJO() {
  super();
 } 
 
}

 

5.代理类以及工厂类

package com.wanczy.dao.proxy;

import java.math.BigDecimal;
import java.sql.Connection;
import java.util.List;

import com.wanczy.dao.CustomerResourceDAO;
import com.wanczy.dao.impl.CustomerResourceDAOImpl;
import com.wanczy.pojo.CustomerResourcePOJO;
import com.wanczy.pub.GetConnection;

public class CustomerResourceDAOProxy implements CustomerResourceDAO {
 Connection conn = null;
 CustomerResourceDAOImpl impl = null;
 public CustomerResourceDAOProxy(){
  try {
   this.conn = GetConnection.getConn();
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  this.impl = new CustomerResourceDAOImpl(this.conn);
 }
 public boolean doDel(BigDecimal cID) {
  boolean flag = this.impl.doDel(cID);
  this.close();
  return flag;
 }

 public boolean doIns(CustomerResourcePOJO pojo) {
  boolean flag = this.impl.doIns(pojo);
  this.close();
  return flag;
 }

 public boolean doUpd(CustomerResourcePOJO pojo) {
  boolean flag = this.impl.doUpd(pojo);
  this.close();
  return flag;
 }

 public CustomerResourcePOJO findByCId(BigDecimal cID) {
  CustomerResourcePOJO pojo = this.impl.findByCId(cID);
  this.close();
  return pojo;
 }

 public List<CustomerResourcePOJO> findByNameLevelState(String sName,
   int cLevel, int cState, int pageSize, int pageCurrent) {
  List<CustomerResourcePOJO> list = this.impl.findByNameLevelState(sName, cLevel, cState, pageSize, pageCurrent);
  this.close();
  return list;
 }

 public int findCountByNameLevelState(String sName, int cLevel, int cState) {
  int count = this.impl.findCountByNameLevelState(sName, cLevel, cState);
  this.close();
  return count;
 }
 public void close(){
  try {
   this.conn.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

 

6.servlet

package com.wanczy.servlet.customerResource;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.wanczy.dao.factory.CustomerResourceDAOFactory;
import com.wanczy.pojo.CustomerResourcePOJO;

public class CustomerResourceQuery extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  request.setCharacterEncoding("utf-8");
  response.setCharacterEncoding("utf-8");
  response.setContentType("text/html; charset=utf-8");
  String sName = request.getParameter("sName");
  int cLevel = Integer.parseInt(request.getParameter("cLevel"));
  int cState = Integer.parseInt(request.getParameter("cState"));
  int pageSize = Integer.parseInt(request.getParameter("pageSize"));
  int pageCurrent = Integer.parseInt(request.getParameter("pageCurrent"));
  List<CustomerResourcePOJO> list = CustomerResourceDAOFactory.getDAOInstance().findByNameLevelState(sName, cLevel, cState, pageSize, pageCurrent);
  int count = CustomerResourceDAOFactory.getDAOInstance().findCountByNameLevelState(sName, cLevel, cState);
  PrintWriter out = response.getWriter();
  StringBuffer sb = new StringBuffer();
  sb.append("<input type=\'hidden\' id=\'count\' value=\'"+count+"\'/>");
  sb.append("<table id=\'sample_1\' class=\'table table-striped table-bordered table-hover table-checkable order-column\'><tr><th>学校名称</th><th>学校地址</th><th>联系人</th><th>联系人电话</th><th>客户等级</th><th>合作状态</th><th>院校领导</th><th>领导电话</th><th>操作</th></tr>");
  for(CustomerResourcePOJO pojo : list){
   String cLevelCode = "";
   if(pojo.getClevel() == 1){
    cLevelCode = "高";
   }else if(pojo.getClevel() == 2){
    cLevelCode = "中";
   }else{
    cLevelCode = "低";
   }
   String cStateCode = "";
   if(pojo.getCstate() == 1){
    cStateCode = "常年合作";
   }else if(pojo.getCstate() == 2){
    cStateCode = "合作少";
   }else{
    cStateCode = "近年无合作";
   }
   sb.append("<tr>" +
     "<td>"+pojo.getSname()+"</td>" +
     "<td>"+pojo.getSadd()+"</td>" +
     "<td>"+pojo.getSlinkMan()+"</td>" +
     "<td>"+pojo.getSlinkTel()+"</td>" +
     "<td>"+cLevelCode+"</td>" +
     "<td>"+cStateCode+"</td>" +
     "<td>"+pojo.getSleader()+"</td>" +
     "<td>"+pojo.getSleaderTel()+"</td>" +
     "<td><a href=\'#\' onclick=\'goUpdate("+pojo.getCid()+")\'>修改</a>&nbsp;&nbsp;&nbsp;&nbsp;" +
       "<a href=\'#\' onclick=\'goDelete("+pojo.getCid()+")\'>删除</a></td>" +
     "</tr>");
  }
  sb.append("</table>");
  out.print(sb.toString());
  out.close();
   
 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  this.doGet(request, response);
 }

}

 

7.web页面

 

<%@page contentType="text/html; charset=utf-8"  %>
 <% String path=request.getContextPath(); %>
 <html>
 <head>
 <title>分页操作</title>
 </head>
 <body>
 <form name = "f">
  <fieldset title="查询">
   <legend>
    <span width="12%" height="25" class="STYLE1"
        style="color: black;">查询条件</span>
   </legend>
  学校名称:<input type="text" name="sName"/>
   合作等级:<select name="cLevel">
      <option value="0" selected="selected">全部</option>
      <option value="1">高</option>
      <option value="2">中</option>
      <option value="3">低</option>
     </select>
   合作状态:<select name="cState">
      <option value="0" selected="selected">全部</option>
      <option value="1">常年合作</option>
      <option value="2">合作少</option>
      <option value="3">近年无合作</option>
     </select>
   <input type="button" value="查询" onclick="query(0)"/>
   <input type="button" value="新增" onclick="goAdd()"/>
  </fieldset>
   
  </form>
  <hr/>
  <div id="showTable"></div>
  <div align="right">
   <input type="button" id="first" value="|<" onclick="query(1)"/>
   <input type="button" id="up" value="<" onclick="query(2)"/>
   <input type="button" id="next" value=">" onclick="query(3)"/>
   <input type="button" id="end" value=">|" onclick="query(4)"/>
   <select id="selectPageCurrent" onchange="query(5)">
    <option value="3" selected="selected">显示3笔</option>
    <option value="5">显示5笔</option>
    <option value="10">显示10笔</option>
   </select>
   <span id="showPageMessage"></span>
  </div>
 </body>
 <script type="text/javascript">
  var pageSize = 3;//一页显示的数据笔数
  var pageCurrent = 1;//显示的页数
  var allCount = 0;//总共的数据笔数
  var allPage = 0;//总共数据页数
  query(0);
  function query(num){
   var sName = f.sName.value;
   var cLevel = f.cLevel.value;
   var cState = f.cState.value;
   if(num == 1){
    pageCurrent = 1;
   }else if(num == 2){
    pageCurrent = pageCurrent -1;
   }else if(num == 3){
    pageCurrent = pageCurrent + 1;
   }else if(num == 4){
    pageCurrent = allPage;
   }else if(num == 5){
    pageCurrent = 1;
    pageSize = $("#selectPageCurrent").val();//取得每页显示的数据笔数
   }
    $(document).ready(function(){
     //设置提交的路径,和参数
    $.post("<%=path %>/CustomerResourceQuery",{"sName":sName,"cLevel":cLevel,"cState":cState,"pageSize":pageSize,"pageCurrent":pageCurrent},
    function(data){//Servlet执行完之后执行方法,data表示的servlet返回数据内容
      $("#showTable").html(data);//显示Servlet返回的内容
      controlButton();
     });
   });
  }
  function controlButton(){
   allCount = $("#count").val();
   if(allCount%pageSize == 0){
    allPage = allCount/pageSize
   }else{
    allPage = Math.floor(allCount/pageSize) +1;
   }
   document.getElementById("first").disabled = false;
   document.getElementById("up").disabled = false;
   document.getElementById("next").disabled = false;
   document.getElementById("end").disabled = false;
   if(allPage == 1){
    document.getElementById("first").disabled = true;
    document.getElementById("up").disabled = true;
    document.getElementById("next").disabled = true;
    document.getElementById("end").disabled = true;
   }else if(pageCurrent == 1){
    document.getElementById("first").disabled = true;
    document.getElementById("up").disabled = true;
   }else if(pageCurrent == allPage){
    document.getElementById("next").disabled = true;
    document.getElementById("end").disabled = true;
   }
   $("#showPageMessage").html("总共"+allCount+"笔数据,当前显示"+pageCurrent+"页,共"+ allPage+"页");
   
  }
  function goAdd(){
   var width = window.screen.width ;
   var height = window.screen.height ;
   window.open("add.jsp","新增客户",\'height=400,width=300,top=\'+(height-450)/2+\',left=\'+(width-300)/2+\',toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no\');
  }
  function goUpdate(cID){
   var width = window.screen.width ;
   var height = window.screen.height ;
   window.open("<%=path%>/CustomerResourceFindByCID?cID="+cID,"修改客户",\'height=400,width=300,top=\'+(height-450)/2+\',left=\'+(width-300)/2+\',toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no\');
  }
  function goDelete(cID){
   if(confirm("确认删除?")){
     $(document).ready(function(){
     //设置提交的路径,和参数
    $.post("<%=path %>/CustomerResourceDel",{"cId":cID},
    function(data){//Servlet执行完之后执行方法,data表示的servlet返回数据内容
      if(data == "true"){
       alert("删除成功");
       query(0);
      }else{
       alert("删除失败,请联系系统管理员");
      }
     });
   });
   }
  }
 </script>
 </body>
 </html>

 

 

 

 

 8.页面实现效果展示

  总结一下吧,mvc+dao设计模式的好处就是实现了java面向对象的思想,接口和方法的实现分开,便于后期的开发和维护,以及功能的增加,通过接口实现类去实现接口中的方法,通过代理类去取得数据库连接池文件及调用方法。  

以上是关于jsp+servlet实现模糊查询和分页效果的主要内容,如果未能解决你的问题,请参考以下文章

JSP+Servlet+javabean+oracle实现页面多条件模糊查询

jsp+sqlserver 2005模糊查询分页时候点击那个首页或下一页的时候老是查出所有

jsp+servlet分页查询

JSP+Servlet+javabean实现页面多条件模糊查询

JSP+Servlet+javabean+mysql实现页面多条件模糊查询(转载)

分页,条件查询