zoukankan      html  css  js  c++  java
  • 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个月多终于完成了~

  • 相关阅读:
    MySQL 日志管理
    nginx 日志分割
    Canvas 动态小球重叠效果
    Canvas制作动态进度加载水球
    js 多张爆炸效果轮播图
    js 多张图片加载 环形进度条
    INSTALL_FAILED_CONFLICTING_PROVIDER
    安卓 文件管理器 各种应用 源码
    android 静音
    android studio 查看大纲
  • 原文地址:https://www.cnblogs.com/YangK-java/p/4654857.html
Copyright © 2011-2022 走看看