[学习笔记]小型论坛功能——实现按照指定每页的行数来分页显示记录[3]
来源:互联网 发布:非关系数据库有哪些 编辑:程序博客网 时间:2024/05/02 11:31
用Jsp 来表述就是如此功能。
package com.bbs.model;
import com.bbs.util.DB;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author lovejavalovejava
*/
/**
此类用来实现分页显示
* 该类最好采用连接池,因为每一次显示页面都要做一次连接
* 本来想用CachedRowSet对象来接受ResultSet对象,可是在netBean提示以后可能要删除此类
* 建议不使用。因此就给连接数据库造成负担。
*
*/
public class PageInfo {
private int pageSize=2; //每页显示的帖子数目[行数]
private int pageCount=0; //总的页数
private String stringSql=null;//设置sql语句
private List<Article> listRs=new ArrayList<Article>();
//用来存放页面数据。
public void setPageCount(int PageCount){
this.pageCount=PageCount;
}
public int getPageCount(){
return this.pageCount;
}
public void setListRs(List<Article> listRs) {
this.listRs = listRs;
}
public List<Article> getListRs() {
return listRs;
}
public int getPageSize() {
return pageSize;
}
public void setStringSql(String sql){
this.stringSql=sql;
}
public String getStringSql(){
return this.stringSql;
}
public void setPageSize(String sql,int pageSize) {
setStringSql(sql);
this.pageSize = pageSize;
Connection conn = null;
Statement stmt = null;
ResultSet rs=null;
try {
conn = DB.getConnection();
/**
设置带有滚动,只读的statement
*/
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs =DB.executeQuery(stmt,stringSql);
/**
* 定位到最后一行
*/
rs.last();
int m= rs.getRow();//m:=总页数
int n=pageSize;
pageCount=((m%n)==0)?m/n:m/n+1;//给总页数赋值
System.out.println("总页数为"+pageCount);
} catch (SQLException ex) {
Logger.getLogger(PageInfo.class.getName()).log(Level.SEVERE, null, ex);
}finally{
DB.close(conn, stmt, rs);
}
}
public void showPage(int page){
/**
俩个i语句f
* 保证了显示的页面不会超过数据表可以表示的页面总数
*/
if (page < 0) {
page = pageCount;
}
if (page > pageCount) {
page = 1;
}
int basePage = (page - 1) * pageSize+1; //实际在数据表中的位置
/** 测试开始行数为数据表中实际开始行数为多少*/
System.out.println("开始行数=" + (basePage));
Connection conn = null;
Statement stmt = null;
ResultSet rs=null;
try {
conn = DB.getConnection();
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs =DB.executeQuery(stmt,stringSql);
int i=1;//计数之用
/**
如果结果集中元组则可以
* 执行
*/
if(rs.next()){
/**
* 当开始的行数不是1则将结果集的光标
* 当前光标---〉指向开始行数的前一行
* 否则表示开始行数为1,上面的if(rs.next())
* 已经将当前光标指向--〉第一条数据了
* 所以为了下面的while(rs.next())
* 则让rs当前光标指向第一条数据之前。
*/
if(basePage!=1){
rs.absolute(basePage-1);
}else{
rs.beforeFirst();
}
/**
用i来记录输出的rs结果集的行数
* 保证只是输出当前页面规定的pageSize大小。
*/
while (rs.next()&&i<=getPageSize()) {
System.out.println( "进入showPage()"+rs.getInt("id"));
Article result = new Article();
result.initFormRs(rs);
listRs.add(result);
i++;
}
} }catch (SQLException ex) {
Logger.getLogger(PageInfo.class.getName()).log(Level.SEVERE, null, ex);
}finally{
DB.close(conn, stmt, rs);
}
}
/**
* 测试方法的正确性
*/
public static void main(String args[]){
PageInfo p=new PageInfo();
p.setPageSize("select * from article",100);
p.showPage(1);
List<Article> list=p.getListRs();
System.out.println(list);
for(int i=0;i<list.size();i++){
int sid=list.get(i).getId();
System.out.println(sid);
int pid=list.get(i).getPid();
System.out.println(pid);
String ss=list.get(i).getCont();
System.out.println(ss);
}
}
}
- [学习笔记]小型论坛功能——实现按照指定每页的行数来分页显示记录[3]
- [学习笔记]小型论坛功能——实现树状结构的主题贴显示的类[2]
- [学习笔记]小型论坛功能——连接数据库 [1]
- [学习笔记]小型论坛功能——初步论坛形式[终]
- WinForm中让窗口按照指定的位置来显示
- PHP学习笔记 2009-8-25 实现分页显示功能
- jsp学习笔记2——分页功能实现
- jsp学习笔记2——分页功能实现
- 控制DATAWINDOW里每页显示的行数
- 论坛功能实现难点分页
- 面向对象的方式来实现分页的功能——分页类PageBean
- GridView的RowDataBind事件中实现记录行数的显示
- 使用ExtJs 来显示数据,并实现数据的分页功能
- (laravel框架)为分页添加小功能:用下拉框设置每页显示的条数
- jsp实现分页显示的功能
- EXT 分页 每页显示N条数据的办法
- <项目一>分页后获取当前页的显示行数
- oracle查询指定行数间的记录
- 判断当前是否有窗口全屏
- 14 确定基类有虚析构函数(exercised)
- 对话框不能响应键盘消息
- 最强悍的夫妻夜话
- Linux操作系统下的多线程编程详细解析
- [学习笔记]小型论坛功能——实现按照指定每页的行数来分页显示记录[3]
- Apache.org改版了
- 实习的第二天
- 无法访问windows安装服务
- 犯过的错
- Free Access to KAV/KIS 6.0/7.0
- 六十五个超级经典小故事
- 在Vista下注册服务
- 接口指针使用时:Unhandled exception ... Stack overflow