[学习笔记]小型论坛功能——实现按照指定每页的行数来分页显示记录[3]
2008-04-12 00:00
691 查看
用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);
}
}
}
相关文章推荐
- [学习笔记]小型论坛功能——实现树状结构的主题贴显示的类[2]
- PHP学习笔记 2009-8-25 实现分页显示功能
- [学习笔记]小型论坛功能——连接数据库 [1]
- discuz学习记录:前面的数据用EasyUI DataGrid显示,实现了服务器端分页
- [学习笔记]小型论坛功能——初步论坛形式[终]
- jsp学习笔记2——分页功能实现
- jsp实现分页(限定显示指定页数)和页面跳转功能
- jsp学习笔记2——分页功能实现
- Dynamic CRM 2013学习笔记(二十五)JS调用web service 实现多条记录复制(克隆)功能
- jsp中完整的分页显示和页面跳转功能实现的源代码
- 分页学习笔记---真分页和假分页实现
- 前端攻城狮学习笔记三:实现一个URI解析方法,把url里#之后的参数解析成指定的数据结构。
- JavaScript学习笔记:用JavaScript部分小功能的实现
- MonoRail学习笔记十四:分页功能的使用
- MyBatis学习笔记-Spring集成DAO层实现方式记录
- JAVA和MySQL实现分页和页面跳转指定当前显示页数的问题
- struts2 学习笔记(简单的登陆功能实现)
- 【转】【笔记】C#实现拖拽功能+MessageBox居父窗口中显示
- web开发-邮件编写HTML网页正常显示实现方法-学习笔记八
- ibernate学习笔记5---实体类或属性名与数据库关键字冲突、hql命名参数、hql实现通用分页