• 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

  • 相关阅读:
    Ambari 整体架构
    Ambari 介绍
    xcode工程命令行生成ipa安装包
    gradle打包java项目
    FreeMarker标签介绍
    P与NP,从概念到研究全面综述
    计算机领域经典笑话
    自己动手写GC
    编程语言简史
    不第后赋菊
  • 原文地址:https://www.cnblogs.com/qqzy168/p/2674802.html
Copyright © 2020-2023  润新知