oracle 分页查询数据统计报表

为防止一次性读取数据过多而内存不足,因此后台每次取出100数据统计,经过多次取;

从而完成统计!

例子如下:service方法

public class QueryClientStatisticsService
{
    protected ClientStatisticsDao clientStatisticsDao = new ClientStatisticsDaoImp();
   
    public void initConfig(ClientStatisticsDo clientStatisticsDo)
    {
       
        try
        {
            //总记录数
            int AllCouts = clientStatisticsDao.queryClientStatisticsCounts(clientStatisticsDo);
            //每次获取100条数据
            int perCounts = 100;
            //需要取nums次
            int nums = (AllCouts % perCounts) == 0 ? (AllCouts / perCounts)
                    : (AllCouts / perCounts) + 1;
            //记录开始位置
            int start ;
            //记录结束位置
            int end ;
            //分次数取数据
           
            String[] statact;
            String[] founctions;
            //存放nums查询累加的客户端功能点
            Map<String, Integer> map = new HashMap<String, Integer>();
            for (int i = 1; i <= nums; i++)
            {
                start = (i - 1) * perCounts + 1;
                end = i * perCounts;
                clientStatisticsDao.queryClientStatistics(clientStatisticsDo,
                        start,
                        end);
                //每次取数据时,list存放客户端功能点编号和次数
                List<String> list = clientStatisticsDo.getList();
                for (int j = 0; j < list.size(); j++)
                {
                    //遍历每条记录
                    statact = list.get(j).split(";");
                    for (int k = 0; k < statact.length; k++)
                    {
                        founctions = statact[k].split(":");
                        //对map初始化
                        if (null == map.get(founctions[0]))
                        {
                            map.put(founctions[0], 0);
                        }
                        map.put(founctions[0], map.get(founctions[0])
                                + Integer.parseInt(founctions[1]));
                    }
                }
            }
           
            //将map的内容封装到域对象中
            this.transform(clientStatisticsDo, map);
           
        }
        catch (BMSException e)
        {
            DebugLogFactory.error(this.getClass(), "other error:", e);
            throw new GeneralBMEException(String.valueOf(e.getExceptionCode()));
        }
       
    }

说明:统计的字段样式:0000:5;0001:23;

2.分页sql语句(需要排序,建立索引):

 SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM ECONF_CLIENT_STATACT t where substr(t.datetime,1,10) between :beginTime AND :endTime order by t.datetime ) A WHERE ROWNUM <=:end ) WHERE RN >=:start

 

 

posted @ 2012-09-07 11:39  嗨,你的益达~~~  阅读(539)  评论(0编辑  收藏  举报