分享一个菜鸟版分页javabean。能够保证用户看到的不是过期数据!

qq562342 2008-01-03 03:07:20
分页bean
/**
* 通过此javabean可实现分页效果
* 特点:能够保证用户不会看到过期的数据、调用方便。
* 调用result方法后,可直接调用getRs()方法返回结果集数据
* 开发人:衣鹏飞
* QQ:562342
* Email:xxxoxxx@yhaoo.cn
* guge@vip.163.com
* */


package hospital.bean;
import java.sql.*;

import hospital.database.*;

public class Pagebean {
public int page=1; //当前第几页
public int maxPage; //一共多少页
public int maxRowCount; //一共多少行
public int rowsperPage; //每页显示行数

public String tsql; //暂时没用,有待开发
public String html=""; //html代码,用来输出页数控制

private ResultSet rs; //数据结果集,将查询后返回的结果集存储至此
public Pagebean() {
rowsperPage=20; //默认显示20行
}
public void setPage(int page) {
this.page = page;
}

public void setMaxPage(int maxPage) {
this.maxPage = maxPage;
}

public void setMaxRowCount(int maxRowCount) {
this.maxRowCount = maxRowCount;
}

public void setRowsperPage(int rowsperPage) {
this.rowsperPage = rowsperPage;
}

public void setTsql(String tsql) {
this.tsql = tsql;
}

public void setHtml(String html) {
this.html = html;
}

public void setRs(ResultSet rs) {
this.rs = rs;
}

public int getPage() {
return page;
}

public int getMaxPage() {
return maxPage;
}

public int getMaxRowCount() {
return maxRowCount;
}

public int getRowsperPage() {
return rowsperPage;
}

public String getTsql() {
return tsql;
}

public String getHtml() {
return html;
}

public ResultSet getRs() {
return rs;
}

/**
* 获取要返回的数据,全用参数方式构成sql语句
* 1.table为要查询的表名
* 2.lie为您确定值是唯一的一列,例如ID。
* 3.order为结果排序方式asc、desc
* 4.url为要连接的页面地址。例如:read.jsp?page=
* 分页由sql语句实现,有些麻烦,但是对会减轻很多服务器负担。
* 能保证用户不会看到过期数据
* */
public void result(String table,String lie,String order,String url){
/**
* page存储当前页数
* 设置是需要-1.
* */
page=page-1;
DB db=new DB(); //实例化连接数据库类
db.result("select count(*) from "+table,0); //统计所要返回表的总数据条数
/**
* 设置maxRowCount为数据库返回的结果
* 发生已成则说明没结果,设置为0并结束程序。
* */
try {
maxRowCount = Integer.parseInt(db.getRs().getString(1));
} catch (SQLException ex) {
maxRowCount=0;
return;
} catch (NumberFormatException ex) {
maxRowCount=0;
return;
}
/**
* 判断总行数取模要返回条数
* 如果等于0说明整除,就设置相应页数
* 如果不等于0说明有余数,就要多加一个页码
* */
if(maxRowCount%rowsperPage==0){
maxPage=maxRowCount/rowsperPage;
}else{
maxPage=maxRowCount/rowsperPage+1;
}
/**
* 构成sql语句,参数较多,请注意使用
* table、lie、order为用户需要传入的参数
* 详细请看构成结果示例
* 用子查询排除方式返回用户想要的结果
* 示例语句:
select top 5 * from jobs
where id not in(select top 0 job_id from jobs order by job_id desc) order by job_id desc
* 可以去查询分析器测试,返回前5条结果,如果修改子查询内“0”为5,则返回后5条数据
* */
String sql
="select top "+rowsperPage+" * from "+table //select top 20 * from jobs
+" where "+lie+" not in"+ //where id not in
"(select top "+page*rowsperPage+" "+lie+" from "+table // (select top 0 id from jobs
+" order by "+lie+" "+order+")"+ // order by id desc)
"order by "+lie+" "+order; //order by id desc
db.getrs(sql); //调用连接类方法执行语句
rs=db.getRs();
int min=1;
int max=maxPage;

/**
* 如果当前页大于7,就多向后显示4页.参数可修改,但不能大于10
* */
if (page + 1 >= 7) {
/**
* min为for循环的初始值、max为最大值(单独设置变量为了方便页码输出)
* */
min=page+1; //不可小于0或大于最大页数
max=page+10; //控制每次显示10个选项

/**
* 判断用户想要的page页面
* 小于0则说明不存在,就默认设置为1页
* */
if (page < 0) {
page = 0;
}

min = page - 5 + 1; //把当前选项控制在正数第6位
max = page + 4 + 1; //把当前选项控制在倒数第5位

/**
* page大于最大页数或者最大页数-page小于10说明为最后10页
* 则设置min和max为相应属性
* */
if (maxPage - page < 10) {
min = maxPage - 9;
max = min + 9;
}
}
/**
* 用html存储要输出在页面上的页面选项。
* 循环组成html值
* */
html+="<div align='center'>";

/**
* 如果是首页则不输出首页点击选项
* */
if(!(page==1-1)){
html += "<a href='" + url + "1'>首页(1)</a> ";
html += "<a href='" + url + (page + 1 - 1) + "'>上一页</a> ";
}
for(int i=min;i<=max;i++){
/**
* 判断当前点击页
* 当前页则不已超链接方式输出
* */
if(i==(page+1)){
html+=i+" ";
}else{
html+="<a href='"+url+i+"'>["+i+"]</a> ";
}
}
/**
* 如果是尾页则不输出尾页点击选项
* */
if(!(page==maxPage-1)){
html += "<a href='" + url + (page + 1 + 1) + "'>下一页</a> ";
html += "<a href='" + url + maxPage + "'>尾页("+maxPage+")</a>";
}
html+="</div>";
if(maxPage<=1){
html="<div align='center'>共"+maxRowCount+"条数据</div>";
}
}
}


...全文
61 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
erikchang 2008-04-03
  • 打赏
  • 举报
回复
没有找到jsp页面代码呀
qq562342 2008-01-03
  • 打赏
  • 举报
回复
分页bean有点小问题

        int min=1;
int max=maxPage;

改为
        int min=1;
int max;
if(maxPage<10){
max=maxPage;
}else{
max = 10;
}
qq562342 2008-01-03
  • 打赏
  • 举报
回复
原理很简单,应该都能看懂
snake09003232 2008-01-03
  • 打赏
  • 举报
回复
好长~~~慢慢看~~
flyidealism 2008-01-03
  • 打赏
  • 举报
回复
顶顶顶顶顶!
2008.
qq562342 2008-01-03
  • 打赏
  • 举报
回复
分页bean
/**
* 通过此javabean可实现分页效果
* 特点:能够保证用户不会看到过期的数据、调用方便。
* 调用result方法后,可直接调用getRs()方法返回结果集数据
* 开发人:衣鹏飞
* QQ:562342
* Email:xxxoxxx@yhaoo.cn
* guge@vip.163.com
* */


package hospital.bean;
import java.sql.*;

import hospital.database.*;

public class Pagebean {
public int page=1; //当前第几页
public int maxPage; //一共多少页
public int maxRowCount; //一共多少行
public int rowsperPage; //每页显示行数

public String tsql; //暂时没用,有待开发
public String html=""; //html代码,用来输出页数控制

private ResultSet rs; //数据结果集,将查询后返回的结果集存储至此
public Pagebean() {
rowsperPage=20; //默认显示20行
}
public void setPage(int page) {
this.page = page;
}

public void setMaxPage(int maxPage) {
this.maxPage = maxPage;
}

public void setMaxRowCount(int maxRowCount) {
this.maxRowCount = maxRowCount;
}

public void setRowsperPage(int rowsperPage) {
this.rowsperPage = rowsperPage;
}

public void setTsql(String tsql) {
this.tsql = tsql;
}

public void setHtml(String html) {
this.html = html;
}

public void setRs(ResultSet rs) {
this.rs = rs;
}

public int getPage() {
return page;
}

public int getMaxPage() {
return maxPage;
}

public int getMaxRowCount() {
return maxRowCount;
}

public int getRowsperPage() {
return rowsperPage;
}

public String getTsql() {
return tsql;
}

public String getHtml() {
return html;
}

public ResultSet getRs() {
return rs;
}

/**
* 获取要返回的数据,全用参数方式构成sql语句
* 1.table为要查询的表名
* 2.lie为您确定值是唯一的一列,例如ID。
* 3.order为结果排序方式asc、desc
* 4.url为要连接的页面地址。例如:read.jsp?page=
* 分页由sql语句实现,有些麻烦,但是对会减轻很多服务器负担。
* 能保证用户不会看到过期数据
* */
public void result(String table,String lie,String order,String url){
/**
* page存储当前页数
* 设置是需要-1.
* */
page=page-1;
DB db=new DB(); //实例化连接数据库类
db.result("select count(*) from "+table,0); //统计所要返回表的总数据条数
/**
* 设置maxRowCount为数据库返回的结果
* 发生已成则说明没结果,设置为0并结束程序。
* */
try {
maxRowCount = Integer.parseInt(db.getRs().getString(1));
} catch (SQLException ex) {
maxRowCount=0;
return;
} catch (NumberFormatException ex) {
maxRowCount=0;
return;
}
/**
* 判断总行数取模要返回条数
* 如果等于0说明整除,就设置相应页数
* 如果不等于0说明有余数,就要多加一个页码
* */
if(maxRowCount%rowsperPage==0){
maxPage=maxRowCount/rowsperPage;
}else{
maxPage=maxRowCount/rowsperPage+1;
}
/**
* 构成sql语句,参数较多,请注意使用
* table、lie、order为用户需要传入的参数
* 详细请看构成结果示例
* 用子查询排除方式返回用户想要的结果
* 示例语句:
select top 5 * from jobs
where id not in(select top 0 job_id from jobs order by job_id desc) order by job_id desc
* 可以去查询分析器测试,返回前5条结果,如果修改子查询内“0”为5,则返回后5条数据
* */
String sql
="select top "+rowsperPage+" * from "+table //select top 20 * from jobs
+" where "+lie+" not in"+ //where id not in
"(select top "+page*rowsperPage+" "+lie+" from "+table // (select top 0 id from jobs
+" order by "+lie+" "+order+")"+ // order by id desc)
"order by "+lie+" "+order; //order by id desc
db.getrs(sql); //调用连接类方法执行语句
rs=db.getRs();
int min=1;
int max=maxPage;

/**
* 如果当前页大于7,就多向后显示4页.参数可修改,但不能大于10
* */
if (page + 1 >= 7) {
/**
* min为for循环的初始值、max为最大值(单独设置变量为了方便页码输出)
* */
min=page+1; //不可小于0或大于最大页数
max=page+10; //控制每次显示10个选项

/**
* 判断用户想要的page页面
* 小于0则说明不存在,就默认设置为1页
* */
if (page < 0) {
page = 0;
}

min = page - 5 + 1; //把当前选项控制在正数第6位
max = page + 4 + 1; //把当前选项控制在倒数第5位

/**
* page大于最大页数或者最大页数-page小于10说明为最后10页
* 则设置min和max为相应属性
* */
if (maxPage - page < 10) {
min = maxPage - 9;
max = min + 9;
}
}
/**
* 用html存储要输出在页面上的页面选项。
* 循环组成html值
* */
html+="<div align='center'>";

/**
* 如果是首页则不输出首页点击选项
* */
if(!(page==1-1)){
html += "<a href='" + url + "1'>首页(1)</a> ";
html += "<a href='" + url + (page + 1 - 1) + "'>上一页</a> ";
}
for(int i=min;i<=max;i++){
/**
* 判断当前点击页
* 当前页则不已超链接方式输出
* */
if(i==(page+1)){
html+=i+" ";
}else{
html+="<a href='"+url+i+"'>["+i+"]</a> ";
}
}
/**
* 如果是尾页则不输出尾页点击选项
* */
if(!(page==maxPage-1)){
html += "<a href='" + url + (page + 1 + 1) + "'>下一页</a> ";
html += "<a href='" + url + maxPage + "'>尾页("+maxPage+")</a>";
}
html+="</div>";
if(maxPage<=1){
html="<div align='center'>共"+maxRowCount+"条数据</div>";
}
}
}


81,115

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧