zf-关于分页必写的代码

1 存储过程

ALTER PROCEDURE [dbo].[getStatForXXGKWeb] 
    @startDate varchar(50), 
    @endDate varchar(50),
    @type varchar(2),
    @page int,    -- 必写的
    @pageRows int,-- 必写的    
    @allrows int output-- 必写的    
AS
declare @beginrow int-- 必写的
declare @endrow int-- 必写的
declare @maxpage int-- 必写的
create table #tmp_count (
sumnum int  -- 必写的
)
declare @sql varchar(2000) -- 必写的
declare @sqlcount varchar(2000) -- 必写的
begin --必写的 写在  begin……end 中
       set @sqlcount = 'insert into #tmp_count(sumnum) select count(1) from #tmp'

exec(@sqlcount)

    select @allrows=sumnum from #tmp_count
       if(@allrows=0)
         set @maxpage=1
       else
         set @maxpage = (@allrows-1)/@pageRows+1
       if @page > @maxpage
          set @page=@maxpage
       set @beginrow = (@page-1)*@pageRows+1
       set @endrow = @page*@pageRows
       if (@endrow > @allrows)
           set @endrow = @allrows
end

2 java代码

ResultPage rs  = publicInfoService.getWebXxgkStat(startDateTj,    
// publicInfoService.getWebXxgkStat 这个要根据情况改 endDateTj, typeId,getPage(),BaseParameter.getPageRowsMiddle()); // typeId,getPage(),BaseParameter.getPageRowsMiddle()
// 这2个参数必写,如果没有那么要加上去,这样的话接口,实现类,存储过程的都要跟着加参数, 下面的也是必写的
if (rs != null) { webxxgkListTj = rs.getResultList(); // webxxgkListTj 这个对象名也要根据情况改
setMaxPage(rs.getMaxPage()); setAllRows(rs.getAllRows()); setThisPageRows(rs.getPageRows());
public ResultPage getWebXxgkStat(String startDate,String endDate,String type,int page,int pageRows) throws Exception;

// 接口这里 ResultPage 必须要返回这个类型
//       实现类一般都是这样的,照着改 
      class WebXxgkStatList implements RowCallbackHandler{ private List result = new ArrayList(); public void processRow(ResultSet rs) throws SQLException{ Hashtable tmp = new Hashtable(); tmp.put("orgId", rs.getObject(1)); tmp.put("orgname", rs.getObject(2)); tmp.put("orglayer", rs.getObject(3)); tmp.put("totalSum", rs.getInt(4)); tmp.put("ysqSum", rs.getInt(5)); tmp.put("yeartotalSum", rs.getInt(6)); tmp.put("bfb", rs.getObject(8)); tmp.put("sumT", rs.getInt(9)); result.add(tmp); } private List getResult(){ return result; } }   // 特别是下面的这些代码,要写,参数名startDate,endDate,type 这3个要看情况换
WebXxgkStatList list
= new WebXxgkStatList(); // 必写 Integer allrows = 0; // 必写 Object[] outobjs = new Object[]{allrows}; // 必写 execProcPage("getStatForXXGKWeb(?,?,?,?,?,?)", // 必写 new Object[] {startDate,endDate,type, page, pageRows},outobjs, list);// 必写 return new ResultPage(list.getResult(), (Integer)outobjs[0], page, pageRows);// 必写
}

3 jsp

<td colspan="4">
            <%@ include file="../../include/pagination_czx.inc"%>
</td>

到目前为止,写了上面所有的代码之后,只能是说 <%@ include file="../../include/pagination_czx.inc"%> 引用的这个inc里面的代码只实现了部分

也就是说,jsp页面只是出现了:

出现了 可以点击 的按钮,但是看上面的87 88 这么说明并没有分页成功。。。

 day02-第三天

  而然我加了这些代码之后,就可以实现了一页显示前18条数据

set @sql='insert into #tmp1
select top ' + CAST((@endrow-@beginrow+1) as varchar(4)) + ' * from (
select top '+ CAST(@endrow as varchar(8)) + ' *  from
(
select top '+ CAST(@endrow as varchar(8)) + ' * from #tmp ) as tmpp
) as tmpp1'

exec(@sql)

    if(@sum=0)
        update #tmp set bfb = 0.00
    else
     update #tmp set bfb = totalSum/@sum*100
    
    update #tmp set sumT = @sum

    select * from #tmp1 order by orglayer,px desc 
    
    --select * from PT_ORGAN where orglayer in (2,3,4)

END

--exec getStatForXXGKWeb '2011-01-01','2013-02-02',''

虽然解决了显示前18条数据,但是还是有个BUG,就是翻页之后还是第一页的数据,数据并没有变,我猜想有可能是我取的是前18条数据,

然后18条数据之后的数据都丢失了。

所以我准备把这段代码改一改试试看:

以下是 2015/10/09日更新

存储过程原来可以直接update 临时表 不用搞成 字符串存到局部变量里再通过exec()执行

这里的分页我是改成了这个样子,我在#tmp临时表里添加了一个自增字段,然后我上面的存储过程就是根据自增字段进行的分页,同时#tmp1里也添加了一个一样的字段,不过不是自增的,因为要把tmp里面的数据插入到tmp1里去。tmp1就是用来装数据的,比如让页面是第二页的时候,这句存储过程只读取#tmp21-40行的数据,也就是只把#tmp的21-40行数据装入#tmp1,然后页面把tmp1里的数据显示出来。

这单子脱了3个月多终于完成了~

原文地址:https://www.cnblogs.com/YangK-java/p/4654857.html