zoukankan      html  css  js  c++  java
  • JSP实现分页功能

     分页须知知识点:

    (1)JDBC2.0的可滚动结果集。

    (2)HTTP GET请求。


    一、可滚动结果集


    Connection con  = DriverManager.getConnection();

    PreparedStatement stmt = con.prepareStatement(sql,ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);

    ResultSet rs = stmt.executeQuery();

    常用方法:

    (1)rs.absolute(n);        可以将指针跳到第n行。

    (2)rs.relative(n);           可以将指针相对向下或向上n行。

    (3)rs.first();

    (4)rs.last();

    (5)int curRow = rs.getRow();    指针指向的当前行


    二、功能实现分解


    1.计算结果的个数


    rs.last();

    int size = rs.getRow();

    即可得到结果的个数。


    2.得到需要分几页


    如果一页能够放5条记录,则

    int pageCount = (size%5==0)?(size/5):(size/5+1);

    即可获得需要分几页。


    3.控制一页中规定显示记录个数


    如果一页能显示5条记录,可以通过使用count进行计数。

    int count = 0;

    do{

        if(count>=5) break;

        .....

        count++;

    }while(rs.next());

    通过break语句,能够使其显示到超过规定条目就跳出。


    4.如何知道当前是第几页


    通过HTTP get的特点,在地址栏中标明当前地址,如http://.......?curPage=1    表示现在是第一页。

    String tmp = request.getParameter("curPage");
    if(tmp==null){
           tmp="1";
    }
    curPage = Integer.parseInt(tmp);

    可以获得当前页。

    注意:

    rs.absolute(1);表示指向第一条记录;

    不存在rs.absolute(0);

    rs.absolute((curPage-1)*PAGESIZE+1);      把结果集指针调整到当前页应该显示的记录的开始.

    比如如果一页显示5条记录,当前页是第二页,则需要把指针调整到6,当前页是第三页,则需要把指针调整为11.


    5.点击首页、上一页、下一页、尾页的行为


    <a href="multipage.jsp?curPage=<%curPage+1%>" >下一页</a>

    <a href="multipage.jsp?curPage=<%curPage-1%>" >上一页</a>

    <a href="multipage.jsp?curPage=<%pageCount%>" >尾页</a>

    <a href="multipage.jsp?curPage=1" >首页</a>


    6.为了保存当前页位置,则需要把当前页位置设为全局变量。


    综合代码:
    <%@ page contentType="text/html" pageEncoding="GB2312" language="java"%>
    <%@ page import="java.sql.*"%>
    <html>
    	<head>
    		<title>hello</title>
    	</head>
    	<body>
    	<table border="1" spacing="2">
    <%!
    	public static final String DRIVER = "com.mysql.jdbc.Driver";
    	public static final String USER = "root";
    	public static final String PASS = "12345";
    	public static final String URL = "jdbc:mysql://localhost:3306/MLDN";
    	public static final int PAGESIZE = 5;
    	int pageCount;
    	int curPage = 1;
    %>
    <%
    	//一页放5个
    	String user = null;
    	String pass = null;
    	try{
    		Class.forName(DRIVER);
    		Connection con = DriverManager.getConnection(URL,USER,PASS);
    		String sql = "SELECT empno,ename,job,hiredate,sal,comm FROM emp";
    		PreparedStatement stat = con.prepareStatement(sql,ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
    		ResultSet rs = stat.executeQuery();
    		rs.last();
    		int size = rs.getRow();
    		pageCount = (size%PAGESIZE==0)?(size/PAGESIZE):(size/PAGESIZE+1);
    		String tmp = request.getParameter("curPage");
    		if(tmp==null){
    			tmp="1";
    		}
    		curPage = Integer.parseInt(tmp);
    		if(curPage>=pageCount) curPage = pageCount;
    		boolean flag = rs.absolute((curPage-1)*PAGESIZE+1);
    		out.println(curPage);
    		int count = 0;
    		
    		do{
    			if(count>=PAGESIZE)break;
    			int empno = rs.getInt(1);
    			String ename = rs.getString(2);
    			String job = rs.getString(3);
    			Date hiredate = rs.getDate(4);
    			float sal = rs.getFloat(5);
    			int comm = rs.getInt(6);
    			count++;
    			%>
    		<tr>
    			<td><%=empno%></td>
    			<td><%=ename%></td>
    			<td><%=job%></td>
    			<td><%=hiredate%></td>
    			<td><%=sal%></td>
    			<td><%=comm%></td>
    		</tr>
    			<%
    		}while(rs.next());
    		con.close();
    	}
    	catch(Exception e){
    		
    	}
    %>
    </table>
    <a href = "multipage.jsp?curPage=1" >首页</a>
    <a href = "multipage.jsp?curPage=<%=curPage-1%>" >上一页</a>
    <a href = "multipage.jsp?curPage=<%=curPage+1%>" >下一页</a>
    <a href = "multipage.jsp?curPage=<%=pageCount%>" >尾页</a>
    第<%=curPage%>页/共<%=pageCount%>页
    
    </body>
    </html>


    作者:xiazdong
    出处:http://blog.xiazdong.info
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
  • 相关阅读:
    Hibernate在自由状态和持久的状态转变
    JS日期时间选择器
    LevelDB初体验
    java多线程样例
    PHP 的解压缩ZipArchive中的extractTo()方法 LINUX+nginx环境中解压zip时文件丢失的问题
    JavaScript--基于对象的脚本语言学习笔记(三)
    什么是消息队列?
    android 环境使用smack 必须注冊的组件
    AssetManager asset的使用
    键盘过滤驱动
  • 原文地址:https://www.cnblogs.com/xiazdong/p/3058362.html
Copyright © 2011-2022 走看看