荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: guangzhougd (考北大上清华读港大回深大), 信区: Java
标  题: 高效的分页系统(上)
发信站: 荔园晨风BBS站 (Thu Nov 16 23:00:11 2006), 站内

先写一个父类.是分页的总类.
效果如:http://www.0755-100.com:888/IWantToHireATutor.jsp

/**
 * <br>满分教育有限公司.
 * <br>http://www.0755-100.com
 * @author Hyucai
 * 深圳大学
 * 日期:2006-9-20
 */
package com.0755.javaBean;

import java.sql.*;
import java.util.*;

/**
 * Pagination.java
 * com.0755.javaBean
 */
public abstract class Pagination {

    private String sql;
    private int rowsPerPage;
    private int rowsCount;
    private int rowsPage;


    /**
     * <br>用于初始化变量的函数.
     * @param RperPage
     * @throws Exception
     */
    public void config(int RperPage) throws Exception{

        this.getAndSetAllRowsCount();
        this.setRowsPerPage(RperPage);

        if(rowsCount%rowsPerPage==0){
            this.setRowsPage(rowsCount/rowsPerPage);
        }else{
            this.setRowsPage(rowsCount/rowsPerPage+1);
        }

    }

    /**
     * <br>读取一页的内容.
     * @param PageNo
     * @return Collection
     * @throws Exception
     */
    public Collection getPageContent(int PageNo) throws Exception{

        Collection result = new ArrayList();
        Connection con=new Pools().getConnection();
        PreparedStatement prep=con.prepareStatement(this.sql);
        ResultSet rs=prep.executeQuery();
        int startRow=(PageNo-1)*this.getRowsPerPage()+1;
        result=packResultSet(rs,startRow,startRow+getRowsPerPage());

        if(rs!=null){
            rs.close();
        }
        if(prep!=null){
            prep.close();
        }
        if(con!=null){
            con.close();con=null;
        }


        if(!result.isEmpty()){
            return result;
        }else{
            return null;
        }

    }



    protected abstract Collection packResultSet(ResultSet rs,int beginRow,int
EndRow)
    throws Exception;


    /**
     * @return  rowsCount
     */
    public int getRowsCount() {
        return rowsCount;
    }
    /**
     * @param rowsCount
     */
    public void setRowsCount(int rowsCount) {
        this.rowsCount = rowsCount;
    }
    /**
     * @return  rowsPage
     */
    public int getRowsPage() {
        return rowsPage;
    }
    /**
     * @param rowsPage
     */
    public void setRowsPage(int rowsPage) {
        this.rowsPage = rowsPage;
    }
    /**
     * @return  rowsPerPage
     */
    public int getRowsPerPage() {
        return rowsPerPage;
    }
    /**
     * @param rowsPerPage rowsPerPage
     */
    public void setRowsPerPage(int rowsPerPage) {
        this.rowsPerPage = rowsPerPage;
    }
    /**
     * @return  sql
     */
    public String getSql() {
        return sql;
    }
    /**
     * @param sql
     *
     */
    public void setSql(String sql) {
        this.sql = sql;
    }

    private void getAndSetAllRowsCount()throws Exception{

    Connection con=new Pools().getConnection();
    int fromPos=sql.indexOf(" from ");
    String countSql="select count(*)  "+sql.substring(fromPos);
    int orderPos=countSql.indexOf(" order ");
    countSql=countSql.substring(0,orderPos);

    //System.out.println("com.0755.javaBean.panigation:"+countSql+".");
    //System.out.println("com.0755.javaBean.panigation:"+this.getSql()+".");
    PreparedStatement prep=con.prepareStatement(countSql);
    ResultSet rs=prep.executeQuery();

    if(rs.next()){

        setRowsCount(rs.getInt(1));
    }

    if(rs!=null){
        rs.close();
    }
    if(prep!=null){
        prep.close();
    }
    if(con!=null){
        con.close();con=null;
    }


    }


}



接着可以根据实际情况,继承父类.实现父类的抽象方法.

--



※ 修改:·guangzhougd 于 Nov 16 23:01:43 修改本文·[FROM: 192.168.124.24]
※ 来源:·荔园晨风BBS站 http://bbs.szu.edu.cn·[FROM: 192.168.124.24]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店