王朝网络
分享
 
 
 

Jsp+beans分页显示记录实战

王朝java/jsp·作者佚名  2006-01-31
宽屏版  字体: |||超大  

我们使用一个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.*"%>

<jsp:useBean id="handlePage" class="bean.PageNumber" scope="session"/>

<jsp:useBean id="myCon" class="bean.MyConnection" scope="application"/>

<HTML>

<BODY bgcolor=cyan><Size=1>

<CENTER>

<BR><BR>

<%!

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

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

try{

out.print("<BR><BR><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());

}

%>

</CENTER>

</BODY>

</HTML>

数据库的表结构是:

create table students(

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

数据库名是:student

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有