JSP学习之------>JSP的查询和分页例子

//这是index.jsp
 

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
 <form action="${pageContext.request.contextPath}/stu.do?p=search" method="post">

编号:<input type="text" name="sid">  <br>
 姓名:<input type=text name="sname">  <br>
 性别:<input type=radio name="sex" value=1>男
      <input type=radio name="sex" value=0>女 <br>

日期:<input type=text name="start"> 到
      <input type=text name="end">   <br>

     <input type="hidden" name="page"/>
      <input type=submit value='搜索'>
      <input type=reset  value='重置'>
</form>

<c:if test="${not empty map}">
 搜索到结果:${map.sum}条,当前${map.page}/${map.count}页
 <hr>
 <table border="1" align="center" width="80%">
   <tr>
     <th>编号</th>
     <th>姓名</th>
     <th>性别</th>
     <th>出生</th>
   </tr>

  <c:forEach items="${map.list}" var="s">
    <tr align="center">
      <td>${s.sid}</td>
      <td>${s.sname}</td>
      <td>${s.sex==1?"男":"女"}</td>
      <td>
         <fmt:formatDate value="${s.sbirthday}" pattern="yyyy年MM月dd日"/>
      </td>
    </tr>
   </c:forEach>
 </table>
  <a href="${pageContext.request.contextPath}/stu.do?p=search&page=1">【首 页】</a>
  <a href="${pageContext.request.contextPath}/stu.do?p=search&page=${map.page+1 }">【下一页】</a>
  <a href="${pageContext.request.contextPath}/stu.do?p=search&page=${map.page-1 }">【上一页】</a>
  <a href="${pageContext.request.contextPath}/stu.do?p=search&page=${map.count }">【末 页】</a>

</c:if>

 
 
 
 
 
//这是servlet的代码
 

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

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

import com.dao.StuDAO;

public class StuServlet extends HttpServlet {

 int size = 3;
  StuDAO stuDAO = new StuDAO();

  @Override
  public void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
         request.setCharacterEncoding("utf-8");
   response.setContentType("text/html;charset=utf-8");
   PrintWriter out = response.getWriter();

   String p = request.getParameter("p");
   if (p.equals("search"))
    doSearch(request, response);

  }

 //分页查询
  public void doSearch(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
      //要显示页数
             String pageString = request.getParameter("page");
             int    page       = 1;
             if (pageString!=null && pageString.trim().length()>0)
                 page       = Integer.parseInt(pageString);

     //其它条件
            String sid  = request.getParameter("sid");
            String sname = request.getParameter("sname");
            String sex   = request.getParameter("sex");
            String start = request.getParameter("start");
            String end   = request.getParameter("end");

           //查
            Map map  = stuDAO.fenye(page, size, sid, sname, sex, start, end);
            request.setAttribute("map",  map);

           request.getRequestDispatcher("/index.jsp").forward(request, response);

 }

}

 

 
 
//这是dao层
 

import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;

import com.db.DbUtil;
 import com.entity.Student;

public class StuDAO {
  DbUtil db = new DbUtil();

  /*
   *
  *    select top 3 * from student where 1=1 and sname like ? and sid not in
  *                      (select top 3 sid from student where 1=1 and sname like ? )
   *
  *    select count(*) from student where 1=1 and ....
   */

  public Map fenye(Integer page,Integer size,String sid,String sname,String sex,String  start,String end){
   List  ifList = new ArrayList(); //条件
   List  list   = new ArrayList(); //结果
  Map   map    = new HashMap();   //所有结果
      StringBuffer sb = new StringBuffer();

     if (sid!=null && sid.trim().length()>0)
      {
       sb.append(" and sid=?");
       ifList.add(Integer.parseInt(sid));
      }

     if (sname!=null && sname.length()>0){
       sb.append(" and sname like ?");
       ifList.add("%"+sname+"%");
      }

     if (sex!=null && sex.trim().length()>0){
         sb.append(" and sex=?");
         ifList.add(Integer.parseInt(sex));
      }

     if (start!=null && start.trim().length()>0){
       sb.append(" and sbirthday>=?");
       ifList.add(java.sql.Date.valueOf(start));
      }

     if (end!=null && end.trim().length()>0){
       sb.append(" and sbirthday<=?");
       ifList.add(java.sql.Date.valueOf(end));
      }
      //总条数
      String sqlCount = "select count(*) from student where 1=1 "+sb.toString();

     ResultSet rsCount = db.getRs(sqlCount, ifList.toArray());
      int sum = 0;
   try {
    rsCount.next();
    sum = rsCount.getInt(1);
   } catch (SQLException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
   }
      int      count    = sum%size==0?sum/size : sum/size+1;
      if (page<1) page = 1;
      if (page>count) page=count;

     String sqlList  = "select top "+size+" * from student where 1=1 "+sb.toString()+" and sid not in (select top "+(page-1)*size+" sid from student where 1=1 "+sb.toString()+")";

     System.out.println("count="+sqlCount);
      System.out.println("list="+sqlList);
      //这句代码很重要
      ifList.addAll(ifList);
      ResultSet rs = db.getRs(sqlList, ifList.toArray());
      try {
    while (rs!=null && rs.next()){
     Student stu = new Student();
     stu.setSid(rs.getInt("sid"));
     stu.setSname(rs.getString("sname"));
     stu.setSex(rs.getInt("sex"));
     stu.setSbirthday(rs.getDate("sbirthday"));
     list.add(stu);

    }
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

   map.put("page", page);
   map.put("size", size);
   map.put("count", count);
   map.put("list", list);
   map.put("sum", sum);

  return map;
  }

  //条件查询,不分页
  public List condition(String sid,String sname,String sex,String  start,String end)
  {
   List  ifList = new ArrayList(); //条件
   List  list   = new ArrayList(); //结果
     StringBuffer sb = new StringBuffer("select * from student  where 1=1 ");
      if (sid!=null && sid.trim().length()>0)
      {
       sb.append(" and sid=?");
       ifList.add(Integer.parseInt(sid));
      }

     if (sname!=null && sname.length()>0){
       sb.append(" and sname like ?");
       ifList.add("%"+sname+"%");
      }

     if (sex!=null && sex.trim().length()>0){
         sb.append(" and sex=?");
         ifList.add(Integer.parseInt(sex));
      }

     if (start!=null && start.trim().length()>0){
       sb.append(" and sbirthday>=?");
       ifList.add(java.sql.Date.valueOf(start));
      }

     if (end!=null && end.trim().length()>0){
       sb.append(" and sbirthday<=?");
       ifList.add(java.sql.Date.valueOf(end));
      }

     ResultSet rs = db.getRs(sb.toString(), ifList.toArray());
      try {
    while (rs!=null && rs.next()){
     Student stu = new Student();
     stu.setSid(rs.getInt("sid"));
     stu.setSname(rs.getString("sname"));
     stu.setSex(rs.getInt("sex"));
     stu.setSbirthday(rs.getDate("sbirthday"));
     list.add(stu);

    }
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

     return list;

 }
  /**
   * @param args
   * jUnit
   */
  public static void main(String[] args) {
   // TODO Auto-generated method stub
   StuDAO  stuDAO = new StuDAO();
   /*List<Student> list = stuDAO.condition(null, "小", "1", null, null);
   for (Student student : list) {
    System.out.println(student.getSid()+"\t"+student.getSname()+"\t"+student.getSex());
   }*/

   stuDAO.fenye(1, 3, null, "小", null, null, null);

 }

}
时间: 2024-10-28 21:47:08

JSP学习之------&gt;JSP的查询和分页例子的相关文章

JSP学习之------&amp;gt;JSP分页技术实现 [转贴]

目前比较广泛使用的分页方式是将查询结果缓存在HttpSession或有状态bean中,翻页的时候从缓存中取出一页数据显示.这种方法有两个主要的缺点:一是用户可能看到的是过期数据:二是如果数据量非常大时第一次查询遍历结果集会耗费很长时间,并且缓存的数据也会占用大量内存,效率明显下降. 其它常见的方法还有每次翻页都查询一次数据库,从ResultSet中只取出一页数据(使用rs.last();rs.getRow()获得总计录条数,使用rs.absolute()定位到本页起始记录).这种方式在某些数据库

JSP学习笔记(九)-----JSP标签库

js|笔记 1.JSP标签库(也称自定义库)可看成是一套产生基于XML脚本的方法,它经由JavaBeans来支持.在概念上说,标签库是非常简单和可以重用的代码构造.它可以大大简化你在页面中输入各种录入框的代码(诸如此类的代码:<input type="text" name="taxpayerName" value = " ,<select name="collectionItemCode" class="requi

JSP学习笔记(四)-----JSP动作的使用

js|笔记 1. 该实例主要告诉我们怎么样在JSP代码中使用JSP动作,例如<jsp:forward >2. 该实例需要四个文件:login.jsp,test.jsp,ok.htm,no.htm3. 首先看一下login.jsp<html><center><form method=get action="http://127.0.0.1:8000/test.jsp">username<input type=text name=use

JSP学习笔记(五)-----JSP中使用JavaBean

js|笔记 1. 该实例主要告诉我们怎么样在JSP代码中调用JavaBean构件2. 使用JavaBean的优点是简化了JSP代码,界面代码和逻辑代码互相分离,便于程序员查看和调试3. 该实例需要五个文件:login.jsp,test.jsp, userbean.class4. 首先看一下login.jsp <html><center><form method=post action="http://127.0.0.1:8000/test.jsp">

动态网页学习:JSP学习笔记全记录

js|笔记|动态|网页 JSP学习笔记(一)-----概述 JSP学习笔记(二)-----使用Tomcat运行JSP文件 JSP学习笔记(三)-----使用JSP处理用户注册和登陆 JSP学习笔记(四)-----JSP动作的使用 JSP学习笔记(五)-----JSP中使用JavaBean JSP学习笔记(六)-----在多个JSP页面之间传递参数 JSP学习笔记(七)-----猜数字游戏 JSP学习笔记(八)-----include的运用 JSP学习笔记(九)-----JSP标签库

急!jsp连接sqlserver2000数据库的问题 查询数据只能查到最后一行

问题描述 数据库里比如有三行不同的数据,但查到的却是三行一样的数据,是最后一行的StudentOperation里的select()方法:publicListselect()throwsException{Connectionconn=ConnectionTest.getConnection();Statementstmt=conn.createStatement();Stringsql="select*fromstudent";Listlist=newArrayList();Resu

JSP学习之数据库开发小结_JSP编程

本文总结了JSP学习之数据库开发方法.分享给大家供大家参考.具体如下: SQL语言的组成: 1>数据定义语言DDL 用于定义SQL模式,数据表,视图和索引等数据库对象 2>数据操纵语言DML 数据查询和数据更新语言 3>数据控制语言DCL 设定或更改数据库用户或角色 4>嵌入式SQL语言 SQL语句嵌入到宿主语言中 数据类型: 1>数字类型 INTEGER SMALLINT REAL NUMERIC DECIMAL FLOAT DOUBLE... 2>日期和时间类型 T

JSP学习心得

js|心得 作者:徐春金 下面是本人在学习JSP时的一些心得: 一.JSP工作原理 在一个JSP文件第一次被请求时,JSP引擎把该JSP文件转换成为一个servlet.而这个引擎本身也是一个servlet,在JSWDK或WEBLOGIC中,它就是JspServlet. JSP引擎先把该JSP文件转换成一个Java源文件,在转换时如果发现jsp文件有任何语法错误,转换过程将中断,并向服务端和客户端输出出错信息:如果转换成功, JSP引擎用javac把该Java源文件编译成相应的class文件.然后

JAVA/JSP学习系列之八(改写MySQL翻页例子)

js|mysql|翻页 一.前言 其实,改写后的JDBC Data-Source是运行在Servlet中的,通过JNDI去查找数据源.我用Orion试的,将本站<JAVA/JSP学习系列之六(MySQL翻页例子) > 简单改写了一下. 二.配置 (1)JDBC 需要将用到的JDBC驱动Copy到[ORION]/lib目录下 (2)data-source 在[ORION]/config/data-sources.xml文件中加入如下: 〈data-source class="com.e