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个月多终于完成了~