JSP实现分页显示

分页显示是针对数据库所进行的操作,分页技术主要有3种

  • 1、使用游标定位,丢弃不属于页面的数据
    这是最简单的分页显示实现技术,在每个页面查询得到所有的数据行,使用游标定位到结果集,读取现实数据,这种操作浪费大量内存资源,适用于数据量较少的查询
  • 2、使用缓存结果集,一次查询所有数据
    将查询结果存在Httpsession或状态bean中,翻页的时候从缓存中取出一页显示,可以节省数据库连接资源,但用户有可能看到的是过期数据,并且如果数据量非常大时第一次遍历查询会需要很多时间
  • 3、使用数据库提供的定位集的SQL语句,返回特定行的数据
    在用户的分页查询请求中,将获取的查询请求的行范围作为参数,生成SQL语句,然后每一次请求获得数据库连接对象执行SQL语句,返回查询结果,最后释放所有的数据库访问资源

分页显示的JavaBean实现

1、SQL Sever数据库的分页查询语句
从数据库表中的第m条记录开始取n条记录,利用top关键字进行查询,如果既有top又有order by,从排序好的结果中选择

select * from (
select top n*from(
select top(m+n-1)*from 表名称 order by 主键 desc) t1) t2 order by 主键 asc

2、Oracle数据库的分页语句
可以使用rownum来限制结果集的大小和起始位置,从数据库表中的第m条记录开始查询n条记录

  select * from (
  select rownum r,t1.* from 表名称 t1 where rownum < m+n) t2
  where t2.r >= 10

3、MySQL数据库的分页语句
从数据库表中的第m条记录开始查询n条记录

select * from 表名称 limit m-1,m

以MySQL数据库为例,介绍一个通用的分页显示类,任何用到分页显示的页面都可以调用这个类,新建splitPage.java

package jsp.test;


import java.sql.*;
import java.util.*;

public class splitPage {

//定义数据库连接对象和结果集对象
private Connection con = null;
private Statement stmt = null;
private ResultSet rs = null;
private ResultSetMetaData rsmd = null;
//定义SQL查询语句
private String sqlStr;
//总记录数目
private int rowCount = 0;
//所分的逻辑页数
private int pageCount = 0;
//每页显示的记录数目
private int pageSize = 0;
//设置参考值
public void setCon(Connection con){
	this.con = con;
	if(this.con == null){
		System.out.println("failure to get a connection");
	}
	else{
		System.out.println("success to get a connection");
	}
}
//初始化,获取数据表中的信息
public void initialize(String sqlStr,int pageSize,int ipage){
	
	int irows = pageSize*(ipage-1);
	this.sqlStr = sqlStr;
	this.pageSize = pageSize;
	
	try{
		stmt = this.con.createStatement();
		rs = stmt.executeQuery(this.sqlStr);
		
		if(rs != null){
			
			rs.last();
			this.rowCount = rs.getRow();
			rs.first();
			this.pageCount = (this.rowCount - 1)/this.pageSize + 1;
		}
		this.sqlStr = sqlStr+"  limit  " + irows + ","+pageSize;
		stmt = this.con.createStatement();
		rs = stmt.executeQuery(this.sqlStr);
		rsmd = rs.getMetaData();
		
	}
	catch (SQLException e) {
		
		System.out.println(e.toString());
		// TODO: handle exception
	}
		}
//将显示结果存到Vector集合类中
public Vector getPage(){
	Vector vData = new Vector();
	
	try{
		
		if(rs != null){
			
			while(rs.next())
			{
				String[] sData = new String[6];
				
				for(int j=0;j

然后新建word_list_javabean.jsp

<%@ page language="java" contentType="text/html;charset=gbk"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="jsp.test.*" %>

<%!
	//每页显示的记录数
	int pageSize = 3;
	String sqlStr = "";
	//当前页
	int showPage = 1;
	String userName = "root";
	String userPassword="123456";
	//数据库的url
	String url="jdbc:mysql://localhost:3306/ch10?useUnicode=true&characterEncoding = gb2312";
	//定义连接对象
	Connection dbcon;
	 %>
	 <%
	 try{
	 //加载驱动程序
	 Class.forName("com.mysql.jdbc.Driver");
	 //获得数据库连接对象
	 dbcon = DriverManager.getConnection(url,userName,userPassword);
	 }
	 catch(SQLException ex){
	 
 	System.out.println(ex.toString());
 	}
 	catch(ClassNotFoundException ex){
 	
 	System.out.println(ex.toString());
 	}
 	//给page中参数con赋值
 	pages.setCon(dbcon);
 	sqlStr = "select * from words order by WordsId";
 	//查询数据表
 	String strPage = null;
 	//获取目的界面
 	strPage = request.getParameter("showPage");
 	if(strPage == null){
 	showPage = 1;
 	}
 	else{
 	
 		try{
 			showPage=Integer.parseInt(strPage);
 			}
 			catch(NumberFormatException e){
 			
 			showPage = 1;
 			}
 			if(showPage<1){
 			
 			showPage=1;
 	}
 	}
 	pages.initialize(sqlStr,pageSize,showPage);
 	//获取要显示的命令集
	 	Vector vData = pages.getPage();
	 	
	  %>


  
  
    
    分页显示
	
  
  
  
  

留言本

<% for(int i = 0;i <% } %>
编号 留言标题 留言时间
<%=sData[0]%> <%=sData[1] %> <% //显示留言时间,省去时间串中的“.”后面的字符 String str_WordsTime = sData[3]; if(str_WordsTime.indexOf(".")>-1) { str_WordsTime=str_WordsTime.substring(0,str_WordsTime.indexOf(".")); } out.println(str_WordsTime); %>
<%=pages.getRowCount()%>条  <%=pageSize%>条/页  第<%=showPage%>页/共 <%=pages.getPageCount()%>页  [首页]  <% //判断“上一页”链接是否要显示 if(showPage>1){ %> [上一页]   <% }else{ %> [上一页] <% } //判断下一页链接是否要显示 if(showPage [下一页]   <% }else{ %> [下一页]  <% } %> [尾页]  转到 页  <% //关闭数据库连接 dbcon.close(); %>

word_list_javabean.jsp页面将SQL查询语句和每页要显示的信息数量传递给分类显示类中的方法,然后获得当前页面所要显示的数据的集合,最后将这些数据显示到页面上

最后来看一下运行效果
JSP实现分页显示_第1张图片

你可能感兴趣的:(JSP应用学习笔记)