[学习笔记]小型论坛功能——实现按照指定每页的行数来分页显示记录[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);

  }
  
  }
}
 

原创粉丝点击