oracle 分页查询数据统计报表
2012-09-07 11:39
357 查看
为防止一次性读取数据过多而内存不足,因此后台每次取出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
从而完成统计!
例子如下: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
相关文章推荐
- 通过JDBC实现对Oracle,mysql数据库的增删改查,模糊查询,查询全部,根据ID查询,分页查询,统计查询,
- 利用 GROUP BY 和 MAX 实现对表数据分组统计后的过滤查询(Oracle920)
- Oracle中select查询 分页 分组 统计语句
- Oracle分页查询排序数据重复问题
- oracle 数据分页查询
- oracle 实现按周,月,季度,年查询统计数据
- [转]oracle的数据分页查询
- 统计报表 数据查询过大 导致速度非常慢
- oracle分页查询数据重复问题的解决
- MySQL、Oracle、SQLServer 数据分页查询语句
- Oracle, SQL Server, My SQL如何实现数据分页查询语句
- oracle分页查询数据重复问题、分页排序陷阱
- oracle按每天,每周,每月,每季度,每年查询统计数据
- oracle 按每天,每周,每月,每季度,每年查询统计数据
- Oracle、MySql、SQLServer 数据分页查询
- Oracle、MySql、SQLServer、DB2 数据分页查询
- oracle分页查询数据重复问题
- oracle 实现按周,月,季度,年查询统计数据
- oracle分页查询数据重复问题的解决
- Oracle、MySql、SQLServer 数据分页查询