建立数据库:
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 真假分页"涉及了Web开发中的两种常见分页技术:真分页和假分页。这两种方法在处理大量数据时特别有用,能够提高网页加载速度,优化用户体验。 **一、真分页** 真分页(Physical Pagination)是...
总结起来,MySQL的分页方法主要包括假分页和LIMIT分页。假分页适合数据量小、对服务器压力不敏感的场景,而LIMIT分页则更适合数据库分页,特别是配合索引和优化策略,能有效提高查询效率。在实际应用中,应根据具体...
本篇文章将深入探讨JSP实现的真分页和假分页的区别、原理以及具体实现方法。 首先,我们需要理解什么是真分页和假分页。假分页,也称为无状态分页,主要通过在客户端存储和处理分页信息,如当前页数和每页显示的...
在这个"JSP+JDBC_假分页"的主题中,我们将深入探讨如何在不使用数据库支持的分页功能下,通过JSP和JDBC实现一个简单的“假分页”机制。假分页通常指的是在服务器端一次性加载所有数据,然后在客户端(浏览器)进行...
本文将详细讲解如何在Hibernate中实现真分页(物理分页)和假分页(逻辑分页)。 首先,我们来了解什么是真分页和假分页。假分页,也称为内存分页,它一次性加载所有数据到内存中,然后通过索引进行分页显示,这种...
这涉及到两种主要的分页方式:假分页和真分页。这两种方法各有优缺点,适用于不同的场景。 ### 1. 假分页 假分页是一种基于程序逻辑实现的分页方法。它并不依赖于数据库的特定功能,而是通过程序计算出当前页所需...
在实现假分页时,通常需要根据用户请求的页数,计算出数据库查询的起始位置和结束位置,然后用这些信息构造SQL的LIMIT子句(在MySQL中)或使用OFFSET/FETCH(在SQL Server中)来获取相应范围的数据。 假分页的核心...
1. **假分页**:这种方法通常是在服务器端一次性获取所有数据,然后在客户端(浏览器)进行分页处理。这种方式简单,但当数据量大时会消耗大量内存,效率较低。 2. **真分页**:真分页是在服务器端根据当前页码和每...
首先,我们需要理解分页的两种主要类型:真分页和假分页。假分页是指一次性将所有数据加载到内存中,然后在客户端进行分页处理。这种方法虽然实现简单,但缺点明显,当数据量较大时,会占用大量内存,导致系统响应变...
由于描述中提到“适用mysql,不支持oracle”,这意味着该分页组件可能特化于MySQL数据库,可能是因为MySQL特有的SQL语法或者特性使其更易于实现分页。 在`struts 使用示例.html`中,我们可以期待找到如何在Struts2 ...
本案例重点阐述了J2EE中分页代码的基本实现原理,通过假分页展示分页代码的开发,本章作为分页代码的一个开始单元,为后续代码的基础。 产品:JDK 1.5、Tomcat 5.0、MySQL数据库 技术:JAVA、JSP内置对象、SQL...
- **假分页**:通常在内存中先加载所有数据,然后根据页码进行切割显示,这在数据量较大时会导致内存消耗过大,效率低。 - **真分页**:在数据库层面进行分页,只查询需要显示的那部分数据,这种方式更高效,尤其...
然而,标准的GridView控件默认实现的是假分页,即一次性加载所有数据到内存中,这在处理大量数据时会带来性能问题。因此,“Gridview数据真分页”是指在GridView中实现真正的分页功能,只在需要时从数据库获取相应页...
“假分页”则是在应用程序启动或用户请求时,一次性将所有数据加载到内存中,再通过程序逻辑来控制显示哪些数据,虽然这种方式在数据量不大时能提供较快的响应速度,但在大数据场景下会导致内存溢出等问题。...
为了解决这个问题,一种被称为“假分页”或“模拟分页”的技术应运而生。本文将详细介绍如何在Java中实现仿百度假分页。 首先,我们来看一下服务层(Service Layer)的代码实现。在这个示例中,我们假设有一个名为`...
真分页、假分页、分页组件 1、 分页算法的用处 2、 分页算法的实现:真分页、加分页 3、 将分页代码形成组件 基于Mysql数据库以及Oracle数据库都有详细的讲解
此外,还有事务处理、批处理操作、结果集的滚动和分页等高级特性。 在实际开发中,还需要注意一些兼容性和性能问题。例如,确保MySQL服务器和驱动版本匹配,以及合理配置连接池以提高应用性能。在处理大量并发请求...
- **假分页**:通常指一次性从数据库获取所有数据,然后在客户端进行分页,数据量大时会消耗大量内存。 - **真分页**:每次只从数据库中获取当前页的数据,降低了内存占用,提高了性能。 3. **SQL数据库与分页**...