`
加菲学Java
  • 浏览: 132602 次
  • 性别: 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 真假分页

    【标题】"jsp+mySql 真假分页"涉及了Web开发中的两种常见分页技术:真分页和假分页。这两种方法在处理大量数据时特别有用,能够提高网页加载速度,优化用户体验。 **一、真分页** 真分页(Physical Pagination)是...

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

    总结起来,MySQL的分页方法主要包括假分页和LIMIT分页。假分页适合数据量小、对服务器压力不敏感的场景,而LIMIT分页则更适合数据库分页,特别是配合索引和优化策略,能有效提高查询效率。在实际应用中,应根据具体...

    JSP实现真分页和假分页

    本篇文章将深入探讨JSP实现的真分页和假分页的区别、原理以及具体实现方法。 首先,我们需要理解什么是真分页和假分页。假分页,也称为无状态分页,主要通过在客户端存储和处理分页信息,如当前页数和每页显示的...

    JSP+JDBC_假分页

    在这个"JSP+JDBC_假分页"的主题中,我们将深入探讨如何在不使用数据库支持的分页功能下,通过JSP和JDBC实现一个简单的“假分页”机制。假分页通常指的是在服务器端一次性加载所有数据,然后在客户端(浏览器)进行...

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

    本文将详细讲解如何在Hibernate中实现真分页(物理分页)和假分页(逻辑分页)。 首先,我们来了解什么是真分页和假分页。假分页,也称为内存分页,它一次性加载所有数据到内存中,然后通过索引进行分页显示,这种...

    JSP+JDBC_真分页(基于Oracle数据库分页)笔记

    这涉及到两种主要的分页方式:假分页和真分页。这两种方法各有优缺点,适用于不同的场景。 ### 1. 假分页 假分页是一种基于程序逻辑实现的分页方法。它并不依赖于数据库的特定功能,而是通过程序计算出当前页所需...

    1-JSP+JDBC_假分页

    在实现假分页时,通常需要根据用户请求的页数,计算出数据库查询的起始位置和结束位置,然后用这些信息构造SQL的LIMIT子句(在MySQL中)或使用OFFSET/FETCH(在SQL Server中)来获取相应范围的数据。 假分页的核心...

    JSP+DAO和MVC+DAO(基于MySQL数据库分页)-v笔记

    1. **假分页**:这种方法通常是在服务器端一次性获取所有数据,然后在客户端(浏览器)进行分页处理。这种方式简单,但当数据量大时会消耗大量内存,效率较低。 2. **真分页**:真分页是在服务器端根据当前页码和每...

    很好JSP中mysql oracle 真分页组件

    首先,我们需要理解分页的两种主要类型:真分页和假分页。假分页是指一次性将所有数据加载到内存中,然后在客户端进行分页处理。这种方法虽然实现简单,但缺点明显,当数据量较大时,会占用大量内存,导致系统响应变...

    ssh 分页组件,含使用示例

    由于描述中提到“适用mysql,不支持oracle”,这意味着该分页组件可能特化于MySQL数据库,可能是因为MySQL特有的SQL语法或者特性使其更易于实现分页。 在`struts 使用示例.html`中,我们可以期待找到如何在Struts2 ...

    1-JSP+JDBC_假分页.rar

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

    javaweb后台数据真分页

    - **假分页**:通常在内存中先加载所有数据,然后根据页码进行切割显示,这在数据量较大时会导致内存消耗过大,效率低。 - **真分页**:在数据库层面进行分页,只查询需要显示的那部分数据,这种方式更高效,尤其...

    Gridview数据真分页

    然而,标准的GridView控件默认实现的是假分页,即一次性加载所有数据到内存中,这在处理大量数据时会带来性能问题。因此,“Gridview数据真分页”是指在GridView中实现真正的分页功能,只在需要时从数据库获取相应页...

    浅谈分页思路

    “假分页”则是在应用程序启动或用户请求时,一次性将所有数据加载到内存中,再通过程序逻辑来控制显示哪些数据,虽然这种方式在数据量不大时能提供较快的响应速度,但在大数据场景下会导致内存溢出等问题。...

    java仿百度假分页代码实现的详解

    为了解决这个问题,一种被称为“假分页”或“模拟分页”的技术应运而生。本文将详细介绍如何在Java中实现仿百度假分页。 首先,我们来看一下服务层(Service Layer)的代码实现。在这个示例中,我们假设有一个名为`...

    网站开发 分页算法精解

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

    mysql-connector-java-8.0.13.jar

    此外,还有事务处理、批处理操作、结果集的滚动和分页等高级特性。 在实际开发中,还需要注意一些兼容性和性能问题。例如,确保MySQL服务器和驱动版本匹配,以及合理配置连接池以提高应用性能。在处理大量并发请求...

    AspNetPager+sql实现真分页效果

    - **假分页**:通常指一次性从数据库获取所有数据,然后在客户端进行分页,数据量大时会消耗大量内存。 - **真分页**:每次只从数据库中获取当前页的数据,降低了内存占用,提高了性能。 3. **SQL数据库与分页**...

Global site tag (gtag.js) - Google Analytics