这是存储过程的代码:
CREATE PROCEDURE d_pageShow
@tableName varchar(255), -- 表名 
@getFields varchar(1000) = '*', -- 需要返回的列 
@orderByFields varchar(255)='', -- 排序的字段名 
@pageSize int = 10, -- 页尺寸 
@pageIndex int = 1, -- 页码 
@doCount bit = 0, -- 返回记录总数, 非 0 值则返回 
@orderType bit = 0, -- 设置排序类型, 非 0 值则降序 
@where varchar(1500) = '' -- 查询条件 (注意: 不要加 where) 
AS 
declare @strSQL varchar(5000) -- 主语句 
declare @strTmp varchar(110) -- 临时变量 
declare @strOrder varchar(400) -- 排序类型 
if @doCount != 0 
begin 
if @where !='' 
set @strSQL = "select count(*) as Total from [" + @tableName + "] where "+@where 
else 
set @strSQL = "select count(*) as Total from [" + @tableName + "]" 
end 
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况 
else 
begin 
if @orderType != 0 
begin 
set @strTmp = "<(select min" 
set @strOrder = " order by [" + @orderByFields +"] desc" 
--如果@orderType不是0,就执行降序,这句很重要! 
end 
else 
begin 
set @strTmp = ">(select max" 
set @strOrder = " order by [" + @orderByFields +"] asc" 
end 
if @pageIndex = 1 
begin 
if @where != '' 
set @strSQL = "select top " + str(@pageSize) +" "+@getFields+ " from [" + @tableName + "] where " + @where + " " + @strOrder 
else 
set @strSQL = "select top " + str(@pageSize) +" "+@getFields+ " from ["+ @tableName + "] "+ @strOrder 
--如果是第一页就执行以上代码,这样会加快执行速度 
end 
else 
begin 
--以下代码赋予了@strSQL以真正执行的SQL代码 
set @strSQL = "select top " + str(@pageSize) +" "+@getFields+ " from [" 
+ @tableName + "] where [" + @orderByFields + "]" + @strTmp + "(["+ @orderByFields + "]) from (select top " + str((@pageIndex-1)*@pageSize) + " ["+ @orderByFields + "] from [" + @tableName + "]" + @strOrder + ") as tblTmp)"+ @strOrder 
if @where != '' 
set @strSQL = "select top " + str(@pageSize) +" "+@getFields+ " from [" 
+ @tableName + "] where [" + @orderByFields + "]" + @strTmp + "([" 
+ @orderByFields + "]) from (select top " + str((@pageIndex-1)*@pageSize) + " ["
+ @orderByFields + "] from [" + @tableName + "] where " + @where + " " 
+ @strOrder + ") as tblTmp) and " + @where + " " + @strOrder 
end 
end 
exec (@strSQL)
GO
====================================================================
这是调用的代码(***.action):
public class InfoTitlePageAction extends Action {
        public ActionForward execute(
                ActionMapping mapping,
                ActionForm form,
                HttpServletRequest request,
                HttpServletResponse response) {
                InfoPageForm infoPageForm = (InfoPageForm)form;
                InfoTitlePage infoTitlePage = new InfoTitlePage();
                infoTitlePage.copyInfoPageForm(infoPageForm);
                
                request.setAttribute("infoTitlePage",infoTitlePage);
                
                InfoTitlePageDao dao = InfoTitlePageDaoFactory.create();
                DataSource datasource=this.getDataSource(request,"infoPromulgate");
                Connection con = null;
                
                try {
                        
                        con = datasource.getConnection();
                        InfoTitle[] infoTitles = new InfoTitle[dao.getInfoTitles(infoTitlePage,con).length] ;
                        infoTitles = dao.getInfoTitles(infoTitlePage,con) ;
                        request.setAttribute("infoTitles",infoTitles);
                        
                } catch (SQLException e) {
                        
                        e.printStackTrace();
                        return mapping.findForward("failure");
                        
                }finally {
                        try {
                                con.close();
                        } catch (SQLException e) {
                                
                                e.printStackTrace();
                        }
                }
                                        
                return mapping.findForward("success");
                
        }
} 
=========================================================
这是那个infoTitles = dao.getInfoTitles(infoTitlePage,con) ;的具体代码:
/*
         * 得到相应的分页InfoTitles
         */
        public InfoTitle[] getInfoTitles(InfoTitlePage infoTitlePage,Connection con) {
                Connection conn = null;
                CallableStatement cstmt = null;
                ResultSet rs = null;
                ArrayList arrInfoTitle = new ArrayList();
                InfoTitle[] infoTitles = null;
                
                //到首页
                if(infoTitlePage.getStrMethod().trim().equals("first")){
                                
                        infoTitlePage.setIntPageIndex("1");
                        infoTitlePage.setStrMethod("view");
                        log.info("到首页");
                        
                }
                        
                //到上一页
                if(infoTitlePage.getStrMethod().trim().equals("up")){
                                
                        if(infoTitlePage.getIntPageIndex() > 1){
                                        
                                infoTitlePage.setIntPageIndex("" + (infoTitlePage.getIntPageIndex()-1) );
                                        
                        }else{
                                        
                                infoTitlePage.setIntPageIndex("1");
                                        
                        }
                                
                        infoTitlePage.setStrMethod("view");
                        log.info("到上一页");
                        
                }
                        
                //到下一页
                if(infoTitlePage.getStrMethod().trim().equals("down")){
                                
                        if(infoTitlePage.getIntPageIndex() < infoTitlePage.getIntPageMax()){
                                        
                                infoTitlePage.setIntPageIndex("" + (infoTitlePage.getIntPageIndex() + 1) );
                                        
                        }else{
                                        
                                infoTitlePage.setIntPageIndex("" + infoTitlePage.getIntPageMax());
                                        
                        }
                                
                        infoTitlePage.setStrMethod("view");
                        log.info("到下一页");
                                
                }
                        
                //到末页
                if(infoTitlePage.getStrMethod().trim().equals("last")){
                                
                        infoTitlePage.setIntPageIndex("" + infoTitlePage.getIntPageMax());
                        infoTitlePage.setStrMethod("view");
                        log.info("到末页");
                                
                }
                
                //得到要显示的分页信息
                if(infoTitlePage.getStrMethod().trim().equals("view")){
                        
                        if( infoTitlePage.getIntPageIndex() > infoTitlePage.getIntPageMax() ){
                                
                                infoTitlePage.setIntPageIndex( infoTitlePage.getIntPageMax() + "" );
                                
                        }
                                
                        try {
                                
                        
                                conn = con;
                                cstmt = conn.prepareCall(SQLinfoTitlePage);
                                cstmt.setString( COLUMN_tableName , infoTitlePage.getStrTableName() );
                                cstmt.setString( COLUMN_getFields , infoTitlePage.getStrGetFields() );
                                cstmt.setString( COLUMN_orderByFields , infoTitlePage.getStrOrderByFields() );
                                cstmt.setString( COLUMN_pageSize , infoTitlePage.getIntPageSize() + "" );
                                cstmt.setString( COLUMN_pageIndex , infoTitlePage.getIntPageIndex() + "" );
                                cstmt.setString( COLUMN_doCount , infoTitlePage.getIntDoCount() + "" );
                                cstmt.setString( COLUMN_orderType , infoTitlePage.getIntOrderType() + "" );
                                cstmt.setString( COLUMN_where , infoTitlePage.getStrWhere() );
                                
                                //log.info("得到具体infoTitles的存储过程:");
                                log.info("SQLinfoTitlePage: " + cstmt.toString());
                                rs = cstmt.executeQuery();
                                        
                                while (rs.next()) {
                                                
                                        InfoTitle infoTitle = new InfoTitle();
                                        infoTitle.setIntId(rs.getString("id"));
                                        infoTitle.setStrInfoTitle(rs.getString("infoTitle"));
                                        infoTitle.setStrInfoType(rs.getString("infoType"));
                                        infoTitle.setStrPromulgateTime(rs.getDate("promulgateTime").toLocaleString());
                                        arrInfoTitle.add(infoTitle);
                                                
                                }
                                        
                                infoTitles = new InfoTitle[arrInfoTitle.size()];
                                arrInfoTitle.toArray(infoTitles);
                                return infoTitles;
                                        
                        } catch (SQLException e) {
                                
                                log.error("SQLException: " + e.getMessage() , e );                
                                e.printStackTrace();
                                return null;
                                        
                        }finally {
                                        
                                ResourceManager.close(rs);
                                ResourceManager.close(cstmt);
                                //ResourceManager.close(conn);
                                        
                        }
                                
                }
                
                return infoTitles;
                
        } 
=================================================================
这是页面form初始化的代码:
/*
         * infoTitlePage对象的初始化
         */
        public InfoTitlePage getInfoTitlePage(String infoType,Connection con) {
                Connection conn = null;
                CallableStatement cstmt = null;
                ResultSet rs = null;
                InfoTitlePage infoTitlePage = new InfoTitlePage() ;
                infoTitlePage.setStrWhere(infoType);
                
                //得到记录总值intCount
                // 如果没有记录总值 计算记录总值并把doCount设置为0
                if (infoTitlePage.getIntCount() == -1) {
                                                        
                        try {
                                
                                conn = con;                                
                                cstmt = conn.prepareCall(SQLinfoTitlePage);
                                
                                cstmt.setString( COLUMN_tableName , infoTitlePage.getStrTableName() );
                                cstmt.setString( COLUMN_getFields , infoTitlePage.getStrGetFields() );
                                cstmt.setString( COLUMN_orderByFields , infoTitlePage.getStrOrderByFields() );
                                cstmt.setString( COLUMN_pageSize , infoTitlePage.getIntPageSize() + "" );
                                cstmt.setString( COLUMN_pageIndex , infoTitlePage.getIntPageIndex() + "" );
                                cstmt.setString( COLUMN_doCount , infoTitlePage.getIntDoCount() + "" );
                                cstmt.setString( COLUMN_orderType , infoTitlePage.getIntOrderType() + "" );
                                cstmt.setString( COLUMN_where , infoTitlePage.getStrWhere() );
                                
                                //log.info("infoTitlePage初始化的存储过程:");
                                log.info(SQLinfoTitlePage);
                                rs = cstmt.executeQuery();
                                        
                                if(rs.next()){
                                        
                                        infoTitlePage.setIntCount(rs.getInt("Total") + "");
                                        
                                }
                                        
                                infoTitlePage.setIntDoCount("0");
                        } catch (SQLException e) {
                                        
                                log.error("SQLException: " + e.getMessage(),e);                        
                                e.printStackTrace();
                                return null;
                                        
                        }finally {
                                        
                                ResourceManager.close(rs);
                                ResourceManager.close(cstmt);
                                //ResourceManager.close(conn);
                                        
                        }
                } 
==================================================================
其它相关属性:
        private String SQLinfoTitlePage = "{ call d_pageShow(?,?,?,?,?,?,?,?) }";
        private static final int COLUMN_tableName = 1;
        private static final int COLUMN_getFields = 2;
        private static final int COLUMN_orderByFields = 3;
        private static final int COLUMN_pageSize = 4;
        private static final int COLUMN_pageIndex = 5;
        private static final int COLUMN_doCount = 6;
        private static final int COLUMN_orderType = 7;
        private static final int COLUMN_where = 8;
        
        private Logger log=Logger.getLogger(this.getClass().getName());
忘了初始化的(***.action):
public class MoreInfoAction extends Action {
        // --------------------------------------------------------- Instance Variables
        // --------------------------------------------------------- Methods
        public ActionForward execute(
                ActionMapping mapping,
                ActionForm form,
                HttpServletRequest request,
                HttpServletResponse response) {
                String infoType = request.getParameter("infoType");
                
                InfoTitlePageDao dao = InfoTitlePageDaoFactory.create() ;
                DataSource datasource=this.getDataSource(request,"infoPromulgate");
                Connection con = null;
                
                try {
                        
                        con = datasource.getConnection();
                        InfoTitlePage infoTitlePage = dao.getInfoTitlePage(" infoType='" + infoType + "'",con) ;
                        
                        InfoTitle[] infoTitles = new InfoTitle[dao.getInfoTitles(infoTitlePage,con).length] ;
                        infoTitles = dao.getInfoTitles(infoTitlePage,con) ;
                        request.setAttribute("infoTitles",infoTitles);
                        request.setAttribute("infoTitlePage",infoTitlePage);
                        
                        
                } catch (SQLException e) {
                        
                        e.printStackTrace();
                        return mapping.findForward("failure");
                        
                }finally {
                        try {
                                con.close();
                        } catch (SQLException e) {
                                
                                e.printStackTrace();
                        }
                }
                                
                return mapping.findForward("success");
                
        }
} 
速度还行,还可以优化的,呵呵。