分页计算标签autoBig使用介绍
海量数据的清单式列表在读取、展现及导出过程中可能会出现速度过慢、内存溢出、系统死机等问题,润乾提供了分页计算的方式发布报表。我们更多熟悉的应该是使用extHtml标签发布报表,实现分页计算的功能,随着客户需求不断变化,extHtml在有些方面已经显得力不从心,所以今天这里将介绍润乾报表提供的另外一个分页计算标签:autoBig。
简介
autoBig与传统的extHtml标签的区别主要在于如下几个属性:
dbType=”oracle” //新增,数据库类型,取值可参考下表,未知写unknown
dsName=”ds1″ //新增,要分页的数据集名称,如果是报表中的第一个数据集,可不指定
totalCountExp=”" //总条数表达式,可不写,默认用数据集的SQL
pageCount=”10″ //每一页的记录数
cachePageNum=”5″ //缓存页数
……除startRowParamName和endRowParamName该标签中没有外,其余与extHtml相同
注意:由于autoBig中不再使用startRowParamName 和endRowParamName,所以在报表中也不必再增加起始行参数名startRow和结束行参数名endRow。
autoBig比起extHtml的有点在于使得totalCountExp不再必需,可以自由使用数据集记录数,这将极大地减少用户在页面计算总记录条数的工作量。
实例
首先做一张普通的网格式清单报表,如下
在发布报表的jsp中增加如下代码片段:
<report:autoBig
name=”report1″
reportFileName=”<%=report%>”
dbType=”unknown”
dsName=”ds1″
totalCountExp=”"
pageCount=”10″
cachePageNum=”5″
/>
配置reportConfig.xml文件中alwaysReloadDefine为no,启用缓存。此项设置的目的是使得设置的缓存页数cachePageNum生效。
访问该页面,显示如下
点击下一页,从第一页翻到第六页,并观察后台打印信息:
[2011-04-25 10:13:22] runqianReportLogger : [DEBUG] – 现在计算报表autoBig.raq
[Server@1478a43]: [Thread[HSQLDB Server @1478a43,5,main]]: handleConnection(Socket[addr=/127.0.0.1,port=52685,localport=9001]) entered
[Server@1478a43]: [Thread[HSQLDB Server @1478a43,5,main]]: handleConnection() exited
[Server@1478a43]: [Thread[HSQLDB Connection @1f2e95f,5,HSQLDB Connections @1478a43]]: 5:trying to connect user SA
[Server@1478a43]: 5:SQLCLI:SQLPREPARE select count(*) from ( SELECT * FROM 订单 )
[Server@1478a43]: 5:SQLCLI:SQLEXECUTE:6
[Server@1478a43]: 5:SQLCLI:SQLFREESTMT:6
[2011-04-25 10:13:22] runqianReportLogger : [DEBUG] – 开始生成HTML……
[2011-04-25 10:13:22] runqianReportLogger : [DEBUG] – 生成HTML结束……
[2011-04-25 10:13:22] runqianReportLogger : [DEBUG] – 报表组生成开始。。。。。
[2011-04-25 10:13:22] runqianReportLogger : [DEBUG] – 报表组生成结束。。。。。。
[2011-04-25 10:13:56] runqianReportLogger : [DEBUG] – 现在计算报表autoBig.raq
[2011-04-25 10:13:56] runqianReportLogger : [DEBUG] – 开始生成HTML……
[2011-04-25 10:13:56] runqianReportLogger : [DEBUG] – 生成HTML结束……
[2011-04-25 10:13:59] runqianReportLogger : [DEBUG] – 现在计算报表autoBig.raq
[2011-04-25 10:13:59] runqianReportLogger : [DEBUG] – 开始生成HTML……
[2011-04-25 10:13:59] runqianReportLogger : [DEBUG] – 生成HTML结束……
[2011-04-25 10:14:02] runqianReportLogger : [DEBUG] – 现在计算报表autoBig.raq
[2011-04-25 10:14:02] runqianReportLogger : [DEBUG] – 开始生成HTML……
[2011-04-25 10:14:02] runqianReportLogger : [DEBUG] – 生成HTML结束……
[2011-04-25 10:14:05] runqianReportLogger : [DEBUG] – 现在计算报表autoBig.raq
[2011-04-25 10:14:05] runqianReportLogger : [DEBUG] – 开始生成HTML……
[2011-04-25 10:14:05] runqianReportLogger : [DEBUG] – 生成HTML结束……
[2011-04-25 10:14:08] runqianReportLogger : [DEBUG] – 现在计算报表autoBig.raq
[2011-04-25 10:14:08] runqianReportLogger : [INFO ] – 开始运算报表,首先取数……
[Server@1478a43]: [Thread[HSQLDB Server @1478a43,5,main]]: handleConnection(Socket[addr=/127.0.0.1,port=52724,localport=9001]) entered
[Server@1478a43]: [Thread[HSQLDB Server @1478a43,5,main]]: handleConnection() exited
[Server@1478a43]: [Thread[HSQLDB Connection @7b4ed7,5,HSQLDB Connections @1478a43]]: 6:trying to connect user SA
[Server@1478a43]: [Thread[HSQLDB Connection @1f2e95f,5,HSQLDB Connections @1478a43]]: 5:disconnected SA
[Server@1478a43]: 6:SQLCLI:SQLPREPARE SELECT * FROM 订单
[Server@1478a43]: 6:SQLCLI:SQLEXECUTE:7
[2011-04-25 10:14:08] runqianReportLogger : [DEBUG] – 下面开始打出sql
[2011-04-25 10:14:08] runqianReportLogger : [DEBUG] – ds1=SELECT * FROM 订单
[Server@1478a43]: 6:SQLCLI:SQLFREESTMT:7
[2011-04-25 10:14:08] runqianReportLogger : [INFO ] – 取数结束,开始运算
[2011-04-25 10:14:08] runqianReportLogger : [INFO ] – 计算结束:
[2011-04-25 10:14:08] runqianReportLogger : [DEBUG] – 开始生成HTML……
[2011-04-25 10:14:08] runqianReportLogger : [DEBUG] – 生成HTML结束……
观察中我们可以看到,当从第一页翻到第五页时,后台并没有打印取数sql,是因为从缓存取数的原因;当翻到第六页时,看到完整的取数sql,说明我们设置的缓存页数5(cachePageNum=”5″)生效。