`
加菲学Java
  • 浏览: 131454 次
  • 性别: Icon_minigender_1
  • 来自: 扬州
社区版块
存档分类
最新评论

MySQL假分页

阅读更多

建立数据库:

CREATE DATABASE emp;
USE emp;
-- 建立person表
CREATE TABLE person
(
	-- 生成一个流水号,观察显示的记录数
	id int AUTO_INCREMENT NOT NULL PRIMARY KEY ,
	-- 用户的登陆ID
	uid varchar(32) ,
	-- 用户的真实姓名
	name varchar(32) ,
	-- 用户的登陆密码
	password varchar(20)
) ;
 第一步:

能够显示出所有的记录:

<%@ page contentType="text/html;charset=gbk"%>
<%@ page import="java.sql.*"%>
<html>
<head>
<title>分页显示</title>
</head>
<center>
<h1>人员列表</h1>
<hr>
<br>
<%
    final String DBDRIVER="com.mysql.jdbc.Driver";
	final String DBURL="jdbc:mysql://localhost:3306/emp";
	final String DBUSER="root";
	final String DBPASSWORD="sa";
	Connection conn=null;
%>
<%
	try{
		Class.forName(DBDRIVER);
		conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
		String sql="select id,uid,name,password from person";
		PreparedStatement pstmt=conn.prepareStatement(sql);
		ResultSet rs=pstmt.executeQuery();
%>
<table border="1" width="80%">
	<tr>
		<td>编号</td>
		<td>登陆名称</td>
		<td>姓名</td>
		<td>密码</td>
		<td colspan="2">操作</td>
	</tr>
<%
	int i=0;   //判断是否有数据的标识,如果有数据继续执行,如果没有数据,为0
	while(rs.next()){
    i++;   
	int id=rs.getInt(1);
	String uid=rs.getString(2);
	String name=rs.getString(3);
	String password=rs.getString(4);
%>
	<tr>
		<td><%=id%></td>
		<td><%=uid%></td>
		<td><%=name%></td>
		<td><%=password%></td>
		<td>删除</td>
		<td>更新</td>
	</tr>
<%
}
	rs.close();
	pstmt.close();
	if(i==0){    //没有任何数据 
%>
	<tr>
		<td colspan="6">没有任何数据!</td>
	</tr>
<%
	}	
%>
</table>
<%
	}catch(Exception e){
%>
	<h2>系统出错!</h2>
<%
}finally{
	conn.close();
}
%>
</center>
<body>
</body>
</html>

 

第二步:

   如果要控制每页显示的记录数:只要操作ResultSet即可;原先是whle(rs.next())会把所有的记录数显示出来,此时只要改成if(rs.next()),在外层套循环的次数(即显示的记录数),即可控制每页显示的记录数。

 

for(int x=0;x<lineSize;x++){
		if(rs.next()){    

 还有一个重要的步骤就是如果要显示的是第N页的数据,则需要将前几页的数据空出去

for(int x=0;x<(currentPage-1)*linesize;x++){
		rs.next();			//当前是第几页,就要把前几页的数据空出来,用rs.next()循环出去
	}

 第三步:

首页   上一页    下一页    尾页

button进行控制,触发onClick事件,传递页数

采用script进行控制,进行页数的处理。

需要解决的问题是:

1,计算出总记录数数

 

String sql = "SELECT COUNT(id) from person" ;		
	 pstmt = conn.prepareStatement(sql) ;
	 ResultSet rs = pstmt.executeQuery() ;
	 if(rs.next()){
			allRecorders = rs.getInt(1) ;        //得到所有的记录数
		}
 

2,计算总页数

//计算总页数
		/*有如下情况:
		  总记录数是23条,23/每页显示的记录(10)=2,实际是要有三页的记录数
		  此时采用算法(allRecorders+lineSize-1)/lineSize
		*/
		pageSize=(allRecorders+lineSize-1)/lineSize;
 <%@ page contentType="text/html;charset=gbk"%>
<%@ page import="java.sql.*"%>
<html>
<head>
<title>分页显示</title>
</head>
<center>
<h1>人员列表</h1>
<hr>
<br>
<%!
	final String jspUrl="list_person_false_03.jsp";
%>
<%
	//定义分页变量
	//1,定义每页要显示的记录数
	int lineSize=10;
	//2,定义变量:当前是第几页
	int currentPage=1;
	//计算总页数
	int pageSize=0;
	//   总记录数/每页显示的记录数
	int allRecorders=10;
%>
<%
	try{
		//接受传过来的当前页
		currentPage=Integer.parseInt(request.getParameter("cp"));
	}catch(Exception e){}
%>
<%
    final String DBDRIVER="com.mysql.jdbc.Driver";
	final String DBURL="jdbc:mysql://localhost:3306/mldn";
	final String DBUSER="root";
	final String DBPASSWORD="sa";
	Connection conn=null;
%>
<%
	try{
		Class.forName(DBDRIVER);
		conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
		String sql="select count(id) from person";   //查询总记录数
		PreparedStatement pstmt=null;
		pstmt=conn.prepareStatement(sql);
		ResultSet rs=pstmt.executeQuery();
		if(rs.next()){
			allRecorders=rs.getInt(1);           //得到所有的记录数
		}
		rs.close();
		pstmt.close();

		
		//计算总页数
		/*有如下情况:
		  总记录数是23条,23/每页显示的记录(10)=2,实际是要有三页的记录数
		  此时采用算法(allRecorders+lineSize-1)/lineSize
		*/
		pageSize=(allRecorders+lineSize-1)/lineSize;


		sql="select id,uid,name,password from person";
		pstmt=conn.prepareStatement(sql);
		rs=pstmt.executeQuery();
%>
<script language="javascript">
		function openPage(curpage){
	        //用隐藏文本框接受参数
			document.spage.cp.value=curpage;
			//提交
			document.spage.submit();
}
</script>
<form action="<%=jspUrl%>" name="spage">
	<input type="button" value="首页" onClick="openPage(1)">
	<input type="button" value="上一页" onClick="openPage(<%=currentPage-1%>)">
	<input type="button" value="下一页" onClick="openPage(<%=currentPage+1%>)">
	<input type="button" value="尾页" onClick="openPage(<%=pageSize%>)">
	<input type="hidden" name="cp" value="">
</form>
<table border="1" width="80%">
	<tr>
		<td>编号</td>
		<td>登陆名称</td>
		<td>姓名</td>
		<td>密码</td>
		<td colspan="2">操作</td>
	</tr>
<%
	int i=0;   //判断是否有数据的标识,如果有数据继续执行,如果没有数据,为0
	for(int x=0;x<(currentPage-1)*lineSize;x++){
		rs.next();			//当前是第几页,就要把前几页的数据空出来,用rs.next()循环出去
	}
    for(int x=0;x<lineSize;x++){
		if(rs.next()){    
			i++;   
			int id=rs.getInt(1);
			String uid=rs.getString(2);
			String name=rs.getString(3);
			String password=rs.getString(4);
%>
		<tr>
			<td><%=id%></td>
			<td><%=uid%></td>
			<td><%=name%></td>
			<td><%=password%></td>
			<td>删除</td>
			<td>更新</td>
		</tr>
<%
   }
}
	rs.close();
	pstmt.close();
	if(i==0){    //没有任何数据 
%>
	<tr>
		<td colspan="6">没有任何数据!</td>
	</tr>
<%
	}	
%>
</table>
<%
	}catch(Exception e){
%>
	<h2>系统出错!</h2>
<%
}finally{
	conn.close();
}
%>
</center>
<body>
</body>
</html>

 

第四步:

显示出当前页和总页数;

如果按照之前的代码,会出现以下的情况


 

此时修改代码,主要是进行了按钮的使用问题,用disabled可以让按钮无法使用

 


  <!--<%=currentPage==1?"disabled":""%>: 如果是首页,则按钮首页无法使用-->

	<input type="button" value="首页" onClick="openPage(1)"       <%=currentPage==1?"disabled":""%>>
	<!--<%=currentPage==1?"disabled":""%>: 如果是首页,则按钮上一页也无法使用-->
	<input type="button" value="上一页" onClick="openPage(<%=currentPage-1%>)"
	<%=currentPage==1?"disabled":""%>>
	<!--<%=currentPage==pageSize?"disabled":""%>: 如果是尾页,则按钮下一页也无法使用-->
	<input type="button" value="下一页" onClick="openPage(<%=currentPage+1%>)"
	<%=currentPage==pageSize?"disabled":""%>>
	<!--<%=currentPage==pageSize?"disabled":""%>: 如果是尾页,则按钮尾页也无法使用-->
	<input type="button" value="尾页" onClick="openPage(<%=pageSize%>)"
	<%=currentPage==pageSize?"disabled":""%>>
 第五步:

用下拉列表框选择页数:

触发onChange事件:

跳转到:
	<select name="selpage" onChange="selOpenPage()">
		<%
			for(int x=0;x<=pageSize;x++){
	    %>
		<option value="<%=x%>" <%=currentPage==x?"selected":""%>><%=x%></option>
		<%
		}
	    %>
	</select>
 function selOpenPage(){
			document.spage.cp.value=document.spage.selpage.value;
			document.spage.submit();
		}

 

完整代码

<%@ page contentType="text/html;charset=gbk"%>
<%@ page import="java.sql.*"%>
<html>
<head>
<title>分页显示</title>
</head>
<center>
<h1>人员列表</h1>
<hr>
<br>
<%!
	final String jspUrl="list_person_false_05.jsp";
%>
<%
	//定义分页变量
	//1,定义每页要显示的记录数
	int lineSize=10;
	//2,定义变量:当前是第几页
	int currentPage=1;
	//计算总页数
	int pageSize=0;
	//   总记录数/每页显示的记录数
	int allRecorders=10;
%>
<%
	try{
		//接受传过来的当前页
		currentPage=Integer.parseInt(request.getParameter("cp"));
	}catch(Exception e){}
%>
<%
    final String DBDRIVER="com.mysql.jdbc.Driver";
	final String DBURL="jdbc:mysql://localhost:3306/mldn";
	final String DBUSER="root";
	final String DBPASSWORD="sa";
	Connection conn=null;
%>
<%
	try{
		Class.forName(DBDRIVER);
		conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
		String sql="select count(id) from person";   //查询总记录数
		PreparedStatement pstmt=null;
		pstmt=conn.prepareStatement(sql);
		ResultSet rs=pstmt.executeQuery();
		if(rs.next()){
			allRecorders=rs.getInt(1);           //得到所有的记录数
		}
		rs.close();
		pstmt.close();

		
		//计算总页数
		/*有如下情况:
		  总记录数是23条,23/每页显示的记录(10)=2,实际是要有三页的记录数
		  此时采用算法(allRecorders+lineSize-1)/lineSize
		*/
		pageSize=(allRecorders+lineSize-1)/lineSize;


		sql="select id,uid,name,password from person";
		pstmt=conn.prepareStatement(sql);
		rs=pstmt.executeQuery();
%>
<script language="javascript">
		function openPage(curpage){
	        //用隐藏文本框接受参数
			document.spage.cp.value=curpage;
			//提交
			document.spage.submit();
		}

		function selOpenPage(){
			document.spage.cp.value=document.spage.selpage.value;
			document.spage.submit();
		}
</script>
<form action="<%=jspUrl%>" name="spage">
    <!--<%=currentPage==1?"disabled":""%>: 如果是首页,则按钮首页无法使用-->
	<input type="button" value="首页" onClick="openPage(1)" <%=currentPage==1?"disabled":""%>>
	<!--<%=currentPage==1?"disabled":""%>: 如果是首页,则按钮上一页也无法使用-->
	<input type="button" value="上一页" onClick="openPage(<%=currentPage-1%>)"
	<%=currentPage==1?"disabled":""%>>
	<!--<%=currentPage==pageSize?"disabled":""%>: 如果是尾页,则按钮下一页也无法使用-->
	<input type="button" value="下一页" onClick="openPage(<%=currentPage+1%>)"
	<%=currentPage==pageSize?"disabled":""%>>
	<!--<%=currentPage==pageSize?"disabled":""%>: 如果是尾页,则按钮尾页也无法使用-->
	<input type="button" value="尾页" onClick="openPage(<%=pageSize%>)"
	<%=currentPage==pageSize?"disabled":""%>>
	<input type="hidden" name="cp" value="">
	<font color="red" size="5"><%=currentPage%></font>
	/
	<font color="red" size="5"><%=pageSize%></font>
	跳转到:
	<select name="selpage" onChange="selOpenPage()">
		<%
			for(int x=0;x<=pageSize;x++){
	    %>
		<option value="<%=x%>" <%=currentPage==x?"selected":""%>><%=x%></option>
		<%
		}
	    %>
	</select>
</form>
<table border="1" width="80%">
	<tr>
		<td>编号</td>
		<td>登陆名称</td>
		<td>姓名</td>
		<td>密码</td>
		<td colspan="2">操作</td>
	</tr>
<%
	int i=0;   //判断是否有数据的标识,如果有数据继续执行,如果没有数据,为0
	for(int x=0;x<(currentPage-1)*lineSize;x++){
		rs.next();			//当前是第几页,就要把前几页的数据空出来,用rs.next()循环出去
	}
    for(int x=0;x<lineSize;x++){
		if(rs.next()){    
			i++;   
			int id=rs.getInt(1);
			String uid=rs.getString(2);
			String name=rs.getString(3);
			String password=rs.getString(4);
%>
		<tr>
			<td><%=id%></td>
			<td><%=uid%></td>
			<td><%=name%></td>
			<td><%=password%></td>
			<td>删除</td>
			<td>更新</td>
		</tr>
<%
   }
}
	rs.close();
	pstmt.close();
	if(i==0){    //没有任何数据 
%>
	<tr>
		<td colspan="6">没有任何数据!</td>
	</tr>
<%
	}	
%>
</table>
<%
	}catch(Exception e){
%>
	<h2>系统出错!</h2>
<%
}finally{
	conn.close();
}
%>
</center>
<body>
</body>
</html>
 
  • 大小: 22 KB
分享到:
评论

相关推荐

    jsp+mySql 真假分页

    这是两个可以直接执行的代码,下载后在myeclipse下通过新建Jsp文件即已使用...

    关于Mysql分页的两种方法,假分页和limit分页

    关于Mysql分页的两种方法,一种假分页,没有效率提高,另一种使用limit,对数据量小的情况下效率会高点

    JSP实现真分页和假分页

    用JSP实现的真分页和假分页,环境 Tomcat+mysql

    hibernate中实现真分页和假分页技术

    不错的实例代码,拿出来给大家分享、这不仅适合刚学习hibernate的人,也是合开发一段时间的技术人员!

    1-JSP+JDBC_假分页.rar

    本案例重点阐述了J2EE中分页代码的基本实现原理,通过假分页展示分页代码的开发,本章作为分页代码的一个开始单元,为后续代码的基础。 产品:JDK 1.5、Tomcat 5.0、MySQL数据库 技术:JAVA、JSP内置对象、SQL...

    ssh 分页组件,含使用示例

    ssh 分页组件,含使用示例,可直接使用,适用mysql,不支持oracle

    网站开发 分页算法精解

    真分页、假分页、分页组件 1、 分页算法的用处 2、 分页算法的实现:真分页、加分页 3、 将分页代码形成组件 基于Mysql数据库以及Oracle数据库都有详细的讲解

    MLDN框架笔记大全

    MLDN框架笔记大全 JSP+JDBC_假分页 02 JSP+JDBC_真分页(基于MySQL数据库分页) 03 JSP+DAO和MVC+DAO(基于MySQL数据库分页) 04 Struts入门 05 使用Struts + DAO完成用户登陆 06 Struts标签-...

    Jsp分页操作

    1.数据库采用mysql. hibrenate连接。 2.内置sql脚本 3.采用MVC模式 4.假分页:完全由程序算法控制。 5.假分页只是一个说法。就是一次性把所有的记录拿出来。每页显示固定的条数

    MySql实现翻页查询功能

    分页查询也分为真分页和假分页:  真分页:基于数据库查出的数据直接分页显示,优点是改变数据库数据不会影响查询结果,缺点是速度稍慢。  假分页:将所有数据查询出的数据,封装到list集合缓存中,表现层方法调用...

    (魔乐)J2EE三大框架_笔记

    (魔乐)J2EE三大框架_笔记 1-JSP_JDBC_假分页 2-JSP_JDBC_真分页(基于MySQL数据库分页) 3-JSP_DAO和MVC_DAO(基于MySQL数据库分页) ............... 54-留言管理程序 _Struts _ Spring _ Hibernate完成

    SSH学习基础笔记 .zip

    1-JSP+JDBC_假分页笔记.pdf 2-JSP+JDBC_真分页(基于Oracle数据库分页)笔记.pdf 3-JSP+DAO和MVC+DAO(基于MySQL数据库分页)-v笔记.pdf 4-Struts入门笔记.pdf 005_Struts+DAO登陆.pdf 9-Struts高级部分(1)(解决重复提交...

    JAVA框架核心技术笔记.rar

    1-JSP+JDBC_假分页笔记.pdf3-JSP+DAO和MVC+DAO(基于MySQL数据库分页)-v笔记.pdf4-Struts入门笔记.pdf。。。。。。

    J2EE三大框架_笔记_a

    1-JSP+JDBC_假分页笔记 2-JSP+JDBC_真分页(基于Oracle数据库分页)笔记 3-JSP+DAO和MVC+DAO(基于MySQL数据库分页)-v笔记 4-Struts入门笔记 005_Struts+DAO登陆 6-Struts标签-BEAN标签笔记 7-Struts标签 -LOGIC标签...

    J2EE框架_笔记_b

    1-JSP+JDBC_假分页笔记 2-JSP+JDBC_真分页(基于Oracle数据库分页)笔记 3-JSP+DAO和MVC+DAO(基于MySQL数据库分页)-v笔记 4-Struts入门笔记 005_Struts+DAO登陆 6-Struts标签-BEAN标签笔记 7-Struts标签 -LOGIC标签...

    J2EE框架_笔记_c

    1-JSP+JDBC_假分页笔记 2-JSP+JDBC_真分页(基于Oracle数据库分页)笔记 3-JSP+DAO和MVC+DAO(基于MySQL数据库分页)-v笔记 4-Struts入门笔记 005_Struts+DAO登陆 6-Struts标签-BEAN标签笔记 7-Struts标签 -LOGIC标签...

    javaEE框架笔记,识货人下

    1-JSP+JDBC_假分页笔记.pdf 10-Struts高级部分(2)(常用Action、验证框架、动态Form)笔记.pdf 11-留言管理程序_使用Struts + DAO完成笔记.pdf 12-Struts + DAO分页笔记.pdf 13-Hibernate入门(上)笔记.pdf 14-...

    毕业设计,员工信息管理系统2.0,基于SpringBoot和Vue设计开发实现,包含前后端完整源代码和MySql数据库脚本

    主要功能:增删改查,批量删除,条件分页查询,账号锁定,根据员工请假自动生成记录,懒加载,根据时间请假记录自动销假等; 有需要的请自行下载自行查看! 注意:前端和sql文件分别自行打开导入即可,后端项目导入...

    基于Java+MySQL 实现(Web)动态人脸识别的认证识别系统【100010315】

    基于动态人脸识别的身份认证系统主要由Java语言和Web相关语言开发。 主要分为四个模块: 刷脸登录模块:每隔一秒截取摄像头画面...管理员界面模块:主要实现用户信息的分页展示。管理员可以查询、修改和删除用户信息。

    【分享原创】flex+cairngorm+spring+hibernate

    使用flex+spring+hibernate 数据库mysql 主要功能添加、分页查询、批量更新、批量删除 数据库由hibernate自动创建(需修改hiberante配置) 下载后评论加1分记得评级

Global site tag (gtag.js) - Google Analytics