Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 248|回复: 0

[jsp学习]Jsp分页实例

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-2 05:43:19 | 显示全部楼层 |阅读模式
    效果图:
    1)数据库操作类,做简单封装 DB.java package Test; import java.sql.*; public class DB {
      
      // 加载驱动
         static {
             try {
                 Class.forName("com.mysql.jdbc.Driver");
             } catch (ClassNotFoundException e) {
                 System.out.println("驱动加载出错");
             }
         }  // 获取数据库连接  public static Connection getConn() {
       Connection conn = null;
       try {
        conn = DriverManager.getConnection("jdbc:mysql://localhost/userinfo?user=root&password=abcd");
       } catch (SQLException e) {
        e.printStackTrace();
       }
       return conn;
      }
      // 关闭数据库连接
      public static void closeConn(Connection conn) {
       try {
        if(conn != null) {
         conn.close();
         conn = null;
        }
       } catch (SQLException e) {
        e.printStackTrace();
       }
      }
      // 关闭Statement
      public static void closeStmt(Statement stmt) {
       try {
        if(stmt != null) {
         stmt.close();
         stmt = null;
        }
       } catch (SQLException e) {
        e.printStackTrace();
       }
      }
      // 关闭ResultSet
      public static void closeRs(ResultSet rs) {
       try {
        if(rs != null) {
         rs.close();
         rs = null;
        }
       } catch (SQLException e) {
        e.printStackTrace();
       }
      }
    }
    ******************************************************* 2)初始化数据类 initData.java package Test; import java.sql.*; public class initData {  private static Connection conn = null;  private static PreparedStatement pstmt = null;
      
      private static Statement stmt = null;  private static String sql = "insert into userinfo(id,username,age) values(?,?,?)";
      // 总条数
      private static int allCount = 10000;
      // 分批条数
      private static int preCount = 1000;
      // 计数器
      private static int count = 0;  public static void main(String[] args) {
         CleanData();// 清除数据
         InsertData();// 插入数据
        }  /**
       * DDL语句 建表语句
       * create table userinfo ( id int(20) not null, username
       * varchar(255), age varchar(255), primary key (id) )
       */   /**
       * 插入数据 用addBatch()方法
       * 当数据量达到1000时 提交一次
       */
      private static void InsertData()  {
       try {
        conn = DB.getConn();
        pstmt = conn.prepareStatement(sql);
        conn.setAutoCommit(false);
        long start = System.currentTimeMillis();
        for (int i = 1; i <= allCount; i++) {
         pstmt.setInt(1, i);
         pstmt.setString(2, "java" + i);
         pstmt.setString(3, "20");
         pstmt.addBatch();
         if ((i % preCount) == 0) {
          pstmt.executeBatch();
          System.out.println("当前进行完毕===>" + (++count) * preCount
            + "条");
         }
        }
        long end = System.currentTimeMillis();
        System.out.println("数据插入成功!所用时间为: " + (end - start) + " ms");
       } catch (Exception e) {
        e.printStackTrace();
        try {
         conn.rollback();
        } catch (SQLException e1) {
         e1.printStackTrace();
        }
        System.out.println("数据出错,已进行回滚");
       } finally {
        try {
         conn.commit();//提交数据
        } catch (SQLException e) {
         e.printStackTrace();
        }
        DB.closeStmt(pstmt);
        DB.closeConn(conn);
       }
      }
       /**
       * 清除数据
       */
      private static void CleanData() {
       try {
        conn = DB.getConn();
        String sql = "delete from  userinfo";
        stmt = conn.createStatement();
        stmt.executeUpdate(sql);
        System.out.println(sql);
        System.out.println("清除数据成功!");
       } catch (SQLException e) {
        e.printStackTrace();
       } finally {
        DB.closeStmt(stmt);
        DB.closeConn(conn);
       }
      }
    }
    ***************************************************** 3)分页核心类 Pager.java package Test; import javax.Servlet.http.*; public class Pager {
      private int totalRows; // 总行数
      private int pageSize = 20; // 每页显示的行数
      private int currentPage = 1; // 当前页号
      private int totalPages; // 总页数
      private int startRow; // 当前页在数据库中的起始行  // 构造方法1
      private Pager()
      {
      }
      
      // 构造方法2 带参数_totalRows
      private Pager(int _totalRows) {
       totalRows = _totalRows;
       totalPages = totalRows / pageSize;
       int mod = totalRows % pageSize;
       if (mod > 0) {
        totalPages++;
       }
       currentPage = 1;
       startRow = 0;
      }
      
      // 设置当前页在数据库中的起始行
      public void setStartRow(int startRow) {
       this.startRow = startRow;
      }
      // 获取当前页在数据库中的起始行
      public int getStartRow() {
       return startRow;
      }
      // 设置总页数
      public void setTotalPages() {
       totalPages = totalRows / pageSize;
       int mod = totalRows % pageSize;
       if (mod > 0) {
        totalPages++;
       }
      }
      // 获取总页数
      public int getTotalPages() {
       return totalPages;
      }
      // 设置当前页码
      public void setCurrentPage(int currentPage) {
       this.currentPage = currentPage;
      }
      // 获取当前页码
      public int getCurrentPage() {
       return currentPage;
      }
      // 设置总行数
      public void setTotalRows(int totalRows) {
       this.totalRows = totalRows;
      }
      // 获取总行数
      public int getTotalRows() {
       return totalRows;
      }
      // 设置每页显示行数
      public void setPageSize(int pageSize) {
       this.pageSize = pageSize;
      }
      // 获取每页显示的行数
      public int getPageSize() {
       return pageSize;
      }
      // 首页
      public void first() {
       currentPage = 1;
       startRow = 0;
      }
      // 前一页
      public void previous() {
       if (currentPage == 1) {
        return;
       }
       currentPage--;
       startRow = (currentPage - 1) * pageSize;
      }
      // 下一页
      public void next() {
       if (currentPage < totalPages) {
        currentPage++;
       }
       startRow = (currentPage - 1) * pageSize;
      }
      // 最后一页
      public void last() {
       currentPage = totalPages;
       startRow = (currentPage - 1) * pageSize;
      }
      // 刷新页码
      public void refresh(int _currentPage) {
       currentPage = _currentPage;
       if (currentPage > totalPages) {
        last();
       }
      }
      
      /**
       * 获得下一页的页码 如果当前页码+1大于等于最大页数,
       * 则下一页的页码为最大页数 否则下一页的页码为当前页码+1
       */
      public int getNext() {
       if (currentPage +1 >= totalPages) {
        return totalPages;
       } else {
        return currentPage+1 ;
       }
      }
      
      // 获取前一页的页码
      public int getPrevious() {
       if (currentPage - 1 <= 1) {
        return 1;
       } else {
        return currentPage - 1;
       }
      }  // 判断是否存在下一页
      public boolean hasNext() {
       return currentPage < getTotalPages();
      }  // 判断是否存在上一页
      public boolean hasPrevious() {
       return currentPage > 1;
      }  // 判断是否是第一页
      public boolean isFirst() {
       return currentPage == 1;
      }  // 判断是否是最后一页
      public boolean isLast() {
       return currentPage == getTotalPages();
      }
      
      
      /**
       * 产生js代码
       *
       * @param url
       * @return
       */
      public static String getJavascript(String url) {
       StringBuffer sb = new StringBuffer();
       sb.append("function goPage(pageNumber)
    ");
       sb.append("{
    ");
       sb.append("      window.self.location="" + url
         + "?pageNumber="+pageNumber+"&pageSize="+pageSize.value+"";
    ");
       sb.append("}
    ");
       return sb.toString();  }  /**
       * 产生HTML代码
       * @param total
       * @return
       */
      public String getNavigate(){
       
       setTotalPages();
       
       StringBuffer buf = new StringBuffer();   buf.append("<font color="#365f91">共"+ totalRows+ "条记录 "+ pageSize+ "条/页  ");
       buf.append("第"+ currentPage+ "页/共"+ totalPages+ "页  ");
       
       // 判断 "首页" 链接是否显示
       if(isFirst()){
        buf.append("[首页] ");
        }
       else{
        buf.append("[<a href="javascript:goPage(1)" target="_self">首页</a>] ");
       }   // 判断 "上一页" 链接是否显示
       if (hasPrevious()) {
        buf.append("[<a href="javascript:goPage(" + getPrevious()
          + ")" target="_self">上一页</a>] ");
       } else {
        buf.append(" [上一页] ");
       }   // 判断 "下一页" 链接是否显示
       if (hasNext()) {
        buf.append("[<a href="javascript:goPage(" + getNext()
          + ")" target="_self">下一页</a>] ");
       } else {
        buf.append("[下一页] ");
       }   // 判断 "尾页" 链接是否显示
       if(isLast()){
        buf.append("[尾页] 转到");
       }
       else{
        buf.append("[<a href="javascript:goPage(" + totalPages
         + ")" target="_self">尾页</a>] 转到");
       }
       
       // 转到第几页选择框
       // 用onchange方法轻松搞定转向
       buf.append("<select name=select">");   for (int x = 1; x <= getTotalPages(); x++) {
        buf.append("<option value=" + x +"");
        if (currentPage == x) {
         buf.append(" selected ");
        }
         buf.append(">第" + x + "页</option>");
       }
       buf.append("</select>");
       buf.append("每页");
       buf.append("<input type=text size=4 style="text-align:center;height:17px" class=text name=pageSize " +
             "value=""+pageSize+""  >  </font>");
       
       return buf.toString();
      }
      
      
      public static Pager getInstance(HttpServletRequest request,int total){
       Pager cPager = new Pager();
       String pNum = request.getParameter("pageNumber");
       if (pNum == null||pNum == "") pNum = "1";
       int intpNum = Integer.parseInt(pNum);
       
       
       String pSize = request.getParameter("pageSize");  
       if (pSize == null||pSize == "") pSize = "25";
       int intpSize = 0;
       try{
        intpSize = Integer.parseInt(pSize);
       }catch (NumberFormatException nfe){
        intpSize = 20;
        //nfe.printStackTrace();
       }
       cPager.currentPage = intpNum;
       cPager.pageSize = intpSize;
       cPager.totalRows = total;
       
       return cPager;
      }
    } *************************************************************** 4)UserDAO.java package Test; import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList; public class UserDAO {  /**
       * 根据指定的页码范围查找数据
       * @param pageSize
       * @param pageNumber
       * @return
       */
      public static ArrayList<UserInfo> getUsers(int pageSize, int pageNumber) {
        // SQL Server写法
    //  String sql = "select top " + pageSize + " * from userinfo"
    //    + " where id not in " + "(select top "
    //    + ((pageNumber - 1) * pageSize)
    //    + " id from userinfo order by id)" + " order by id"; //  oracle写法   
    //  String sql1 ="select * from " +
    //    "(select rownum r,userinfo.* from userinfo  " +
    //    "where rownum < "+((pageNumber - 1) * pageSize + pageSize)+"t2 where t2.r >= "+((pageNumber - 1) * pageSize)+"";   if(((pageNumber - 1) * pageSize)<0)
        return null;
       
       String sql = "select * from userinfo order by id asc limit "
         + (pageNumber - 1) * pageSize + "," + pageSize;   ArrayList<UserInfo> UserInfoList = new ArrayList<UserInfo>();   Connection conn = null;
       Statement st = null;
       ResultSet rs = null;   try {
        conn = DB.getConn();
        System.out.println(sql);
        st = conn.createStatement();
        rs = st.executeQuery(sql);
       
        while (rs.next()) {
         UserInfo user = new UserInfo();
         user.setId(rs.getInt("id"));
         user.setUsername(rs.getString("username"));
         user.setAge(rs.getString("age"));
         UserInfoList.add(user);
        }
       } catch (SQLException e) {
        e.printStackTrace();
       } finally {
        DB.closeRs(rs);
        DB.closeStmt(st);
       }
       return UserInfoList;
      }  /**
       * 返回总记录数
       * @return
       */
      public static int getCount() {
       String sql = "select count(*) from userinfo";
       int count = 0;   Connection conn = null;
       Statement st = null;
       ResultSet rs = null;   try {
        conn = DB.getConn();
        st = conn.createStatement();
        rs = st.executeQuery(sql);    while (rs.next()) {
         count = rs.getInt(1);
        }
       } catch (SQLException e) {
        e.printStackTrace();
       } finally {
        DB.closeRs(rs);
        DB.closeStmt(st);
       }
       System.out.println("sql记录数:"+count);
       return count;
      } }
    ***************************************************************
    5)jsp页面 pageTest.jsp <%@ page language="java" contentType="text/html; charset=GB18030"
      pageEncoding="GB18030"%>
    <%@ taglib uri="http://jsptags.com/tags/navigation/pager" prefix="pg"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core">
    <%@ page import="Test.*"%>
    <%@ page import="java.util.*"%>
    <%
      int total = UserDAO.getCount();
      Pager pager = Pager.getInstance(request,total);
      String htmlcode = pager.getNavigate();
      String pageNum = request.getParameter("pageNumber");
      int pageNumber = 1;
      if (pageNum == null || pageNum=="" ) {
       pageNumber = 1;
      } else {
       pageNumber = Integer.parseInt(pageNum);
      }
      
      ArrayList<UserInfo> al = UserDAO.getUsers(pager.getPageSize(),pageNumber);
      request.setAttribute("users", al);
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
      <head>
       <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
       <script type="text/javascript">
    <%=Pager.getJavascript(request.getRequestURI())%>
    </script>
      <style>
             <!--
                 body{
                     .p{
                         PADDING-LEFT: 18px; FONT-SIZE: 14px; WORD-SPACING: 4px
                     }
                 }
             -->
             </style>
    <title>Page Test5</title>
      </head>
      <body>
       <!-- 在列表数据为空的时候,要显示的提示信息 -->
       <c:if test="$ {empty users}">
        <tr>
         <td colspan="7">
          <font color="red">没有找到相应的记录</font>
         </td>
        </tr>
       </c:if>
       <!-- 列表数据不为空的时候,要显示的数据 -->
       <c:if test="$ {!empty users}">
        <table border="1">
        <tr>
        <td>
        id
        </td>
        <td>
        name
        </td>
        <td>
        age
        </td>
        </tr>
         <c:forEach items="$ {users}" var="user">
          <tr>
           <td>
            <c:out value="$ {user.id }"></c:out>
           </td>
           <td>
            <c:out value="$ {user.username }"></c:out>
           </td>
           <td>
            <c:out value="$ {user.age }"></c:out>
           </td>
          </tr>
         </c:forEach>
        </table>
        <br>
        <%=htmlcode%>
       </c:if>
      </body>
    </html>  
       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/10/2/054318172.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-6-3 17:17 , Processed in 0.406957 second(s), 52 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表