站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题Jsp+beans分页显示记录实战

Jsp+beans分页显示记录实战

摘要: Jsp+beans分页显示记录实战

我们使用一个beans来实现数据库的记录的分页显示,方法有很多种。本例是以ResultSet类的游标来实现分页的。

本例由:分页显示记录的页面Jsp

分页beans

数据库连接beans组成

本例在Tomcat下测试通过。

关键思想:

假设总记录数为m,每页显示的记录数是n,那么总页数的计算公式是:

总页数=(m%n)==0?(m/n):(m/n+1);

如果准备显示第p页的内容,应当把游标移动到第(p-1)*n+1条记录处。

源代码如下:

1、分页beans

pageNumber.java

package bean;

public class PageNumber

{

int rowCount=1, //总的记录数

pageSize=1, //每页显示的记录数

showPage=1, //设置预显示的页码数

pageCount=1; //分页之后的总页数

public void setRowCount(int n){

rowCount=n;

}

public int getRowCount(){

return rowCount;

}

public void setPageCount(int r,int p){

rowCount=r;

pageSize=p;

pageCount=(rowCount%pageSize)==0?(rowCount/pageSize):(rowCount/pageSize+1);

//计算分页之后的总页数

}

public int getPageCount(){

return pageCount;

}

public void setShowPage(int n){

showPage=n;

}

public int getShowPage(){

return showPage;

}

public void setPageSize(int n){

pageSize=n;

}

public int getPageSize(){

return pageSize;

}

}

2、数据库连接beans

package bean;

import java.sql.*;

import java.io.*;

public class MyConnection{

Connection con=null; //声明一个共享的连接对象

Statement stat=null;

ResultSet rs=null;

int rowCount=0; //总的记录数

public MyConnection(){

try{

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

}catch(ClassNotFoundException e){

System.out.print(e);

}

try{

con=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;

DatabaseName=student;","sa","");

}catch(SQLException e){

System.out.print(e);

}

}

public ResultSet myQuery(String sql) throws SQLException{

//结果集的游标可上下移动,但当数据库变化时,结果集不变,

//不能用结果集更新数据库中的表

stat=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_READ_ONLY);

//返回可滚动的结果集

rs=stat.executeQuery(sql);

return rs;

}

public void myClose() throws SQLException{

con.close();

}

}

3、分页显示记录的JSP页面

<%@page contentType="text/html;charset=gb2312"%>

<%@page import="java.sql.*"%>

<%@page import="bean.PageNumber"%>

<%@page import="bean.MyConnection"%>

<%@page import="java.io.*"%>

<body bgcolor=cyan>



<%!

// 以表格形式显示数据库记录的方法

public void showList(ResultSet rs,JspWriter out,int n){

try{

out.print("

<table border=2><tr><th>学号<th>姓名<th>数学<th>英语<th>物理</tr>");

for(int i=1;i<=n;i++){

out.print("<tr>");

String number=rs.getString(1);

out.print("<td>"+number+"</td>");

String name=rs.getString(2);

out.print("<td>"+name+"</td>");

int math=rs.getInt(3);

out.print("<td>"+math+"</td>");

int english=rs.getInt(4);

out.print("<td>"+english+"</td>");

int physics=rs.getInt(5);

out.print("<td>"+physics+"</td>");

out.print("</tr>");

rs.next();

}

out.print("</table>");

}catch(Exception e){

System.out.println(e);

}

}

%>

<%

ResultSet rs=null;

int rowCount=0; //总的记录数

try{

//返回可滚动的结果集

rs=myCon.myQuery("select * from students");

//将游标移动到最后一行

rs.last();

//获取记录总数

rowCount=rs.getRow();

//设置每页显示的记录数

handlePage.setPageSize(2);

//计算总页数

handlePage.setPageCount(rowCount,handlePage.getPageSize());

out.print("共有"+handlePage.getPageCount()+"页,");

out.print("每页显示"+handlePage.getPageSize()+"条记录");

}catch(SQLException e){

out.print(e);

}

%>

<%--选择显示某页的表单--%>

<%String str=response.encodeRedirectURL("showList.jsp"); //获取showList.jsp的url%>

<form action="<%=str%>" method="post">

显示首页:<input Type="hidden" name="a" value="first">

<input type=submit value="first">

</form>

<form action="<%=str%>" method="post">

显示下一页:<input Type="hidden" name="a" value="next">

<input type=submit value="next">

</form>

<form action="<%=str%>" method="post">

显示上一页:<input Type="hidden" name="a" value="previous">

<input type=submit value="previous">

</form>

<form action="<%=str%>" method="post">

输入要显示的页数:<input Type="text" name="a" value="1" style="text-align:right">

<input type=submit value="submit">

</form>

<%

String s=request.getParameter("a");

if(s==null){

s="1";

}else if(s.equals("first")){

handlePage.setShowPage(1); //设置预显示页

out.print("目前显示第"+handlePage.getShowPage()+"页");

//将游标移到指定的位置

rs.absolute(1);

//显示该页的内容

showList(rs,out,handlePage.getPageSize());

}else if(s.equals("next")){

int n=handlePage.getShowPage(); //获取目前的页数

n=(n+1); //将页数增1

if(n>handlePage.getPageCount()) n=1;

handlePage.setShowPage(n); //设置预显示页

out.print("目前显示第"+handlePage.getShowPage()+"页");

//将游标移到指定的位置

rs.absolute((n-1)*handlePage.getPageSize()+1);

//显示该页的内容

showList(rs,out,handlePage.getPageSize());

}else if(s.equals("previous")){

int n=handlePage.getShowPage(); //获取目前的页数

n=n-1; //将页数减1

if(n<=0) n=handlePage.getPageCount();

handlePage.setShowPage(n); //设置预显示页

out.print("目前显示第"+handlePage.getShowPage()+"页");

//将游标移到指定的位置

rs.absolute((n-1)*handlePage.getPageSize()+1);

//显示该页的内容

showList(rs,out,handlePage.getPageSize());

}else{

int m=Integer.parseInt(s); //把输入的字符转化为整型数

handlePage.setShowPage(m); //设置预显示页

out.print("目前显示第"+handlePage.getShowPage()+"页");

int n=handlePage.getShowPage();

//将游标移到指定的位置

rs.absolute((n-1)*handlePage.getPageSize()+1);

//显示该页的内容

showList(rs,out,handlePage.getPageSize());

}

%>

</body>

数据库的表结构是:

create table students(

id varchar(10),name varchar(10),math int,english int,physics int)

数据库名是:student

注意:本例连接Sql数据库方式是直连,需要三个Sql的直连包。



↑返回目录
前一篇: 新手请教jsp连接数据库的问题
后一篇: JSP用中收集数据:javascript 实现输入多行动态输入