ResultSet需要返回大数据集,用以导出EXCEL,还是当数量上万之后,遍历速度非常慢,请问有什么好办法吗?大概代码: PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
//这里处理,但是10000条记录,遍历非常之慢
rs.getAsciiStream(1);
}
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
//这里处理,但是10000条记录,遍历非常之慢
rs.getAsciiStream(1);
}
解决方案 »
- 寻求网页开发工具
- 在写一个exl的时候内存溢出怎么办,请帮忙看看吧,
- 使用DOM文档对象的时候,怎样指定文档类型?
- java初级程序员的困惑
- 关于怎样运行JSP程序求助(大送分)
- 在jsp里,如何选择日期。
- 为什么在xp系统中无法运行java!!!!!
- !!!急~请教JDBC时时查询ORACLE数据库某表的问题!
- 江湖救急,高手出手啊!!!帮助解决JAVA RMI 的异常问题!!!
- ejb可户段中的 ClassName.class什么意思?
- 实在是想不出来了,汉诺塔游戏程序,如果想要增加排行榜和计时器应该怎么做?请帮忙,实在不行指点一二!
- 请八路神仙解解难题……本人不甚感激……当以以身相许……
比如,可以分线程,多个查询,分别输出到不同的excel文件中,类似分页。
while (rs.next()) {
//这里处理,但是10000条记录,遍历非常之慢
rs.getAsciiStream(1);
需要占用多少jvm的内存,想过没有,而且很可能多来几个人查询就内存溢出,所以一般的都提倡分页查询
使用JDBC操作最快了
你可以先把所有数据放在数组里面,然后再1000条写一次Excel对了内存调大点。
1)请求画面 --> 提供出力按钮,用于启动后台线程,执行出力处理。
2)处理状态查询画面 --> 状态显示,已完成的,提供下载。
主要是由于有其中的两个大字段,一个是varchar2(500),一个是clob字段,如果rs中不含这两个字段,那还是相当快,否则,很慢。
测试下来,是200条大概8秒;用了pstmt.setFetchSize(100);还是不起作用;但是,如果是mssql的,却速度很快,难道是oracle的result有问题?
while(jrs.next()){
i++;
if(i%100 ==0){
System.out.println("0111000第"+ i+"次");
Test.printNow();
}
}换成这样也还是很慢的。
jrs.setCommand(sbSql.toString());
jrs.setReadOnly(true);
jrs.setFetchSize(1000);
Test.printNow("执行前");
jrs.execute(conn);
Test.printNow("执行后");
while(jrs.next()){
i++;
if(i%100 ==0){
System.out.println("0111000第"+ i+"次");
Test.printNow();
}
}用CachedRowSet,时间是耗在jrs.execute(conn);循环的速度非常快。