java,把大量的数据导到excel上。速度奇慢的问题

Sam_Deep_Thinking
Java领域新星创作者
博客专家认证
2009-12-10 07:50:27
由于数据量很大。所以用多个excel来存数据的。

数据量经常都是有十几万到二十多万的。

由于无需在界面上显示数据。所以当拿到ResultSet后。
我直接使用这个结果集把数据写到excel上。如下代码:


rs.next(); //先next一下。
for (int y = 1; y <= pageSize; y++) {



for (int x = 0; x < showFieldArray.length; x++) {

jxl.write.Label labelCell = new jxl.write.Label(x,y,rs.getString(showFieldArray[x].toLowerCase().trim()));
sh.addCell(labelCell);
labelCell = null;
}

rs.next();
}


上面的代码是使用jxl来生成excel的。只是代码思路而已。

想问一下。就是rs中的数据特别多时,由于我把一行数据填充到excel后。rs的游标才会向下
移动一行。这样的话,速度非常的慢的。

由于速度慢,则很有可能http超时了。但是
我的数据还没有处理完。

同时也占用了大量的内存。

请问应该如何处理才会比较快,保证在http超时前导入到excel中。同时提供给客户下载。



...全文
1780 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
realreachard 2009-12-11
  • 打赏
  • 举报
回复
取出来存list里面,后台启线程慢慢保存,前台给他个进度条,让下载的慢慢等....
frank3G 2009-12-11
  • 打赏
  • 举报
回复
先放到数组中
sean1203 2009-12-11
  • 打赏
  • 举报
回复
这个肯定需要改设计
把数据分段
每1万条导出一次excel
这样不会出现很卡的情况
条数自己调试看设多少最快
dinghun8leech 2009-12-11
  • 打赏
  • 举报
回复
先将所需的数据从数据库中取出,关掉数据库连接,然后再做导出操作。不过我觉得导出到xls本身就比较耗内存和时间,我用导航猫导出本地数据库中的数据,每1000条都要耗上一小会。
楼主能不能这样,做个定时器,定期在后台生成这些文档,客户要下载时直接就能下?
xsm 2009-12-11
  • 打赏
  • 举报
回复
同意4楼的看法
crazylaa 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 caili314 的回复:]
难办. 不过这是一个典型的场景. 我的做法是收到http请求后, 启动一个job执行耗时的处理, 然后http立即返回. 客户端定时请求获取job状态(页面刷新或xmlhttp), 探测到job完成后, 启动文件下载. 可以用quartz的job, 或你自己写的job线程和job管理器.
[/Quote]

十几二十万,顶这个了。都放结果集,要是同时来了几十个请求,内存不溢出才怪。要用后台线程慢慢做,分批做。前台可用timer启动ajax去循环检测
swandragon 2009-12-10
  • 打赏
  • 举报
回复
ResultSet一直开着,还做2个for循环,做这样的操作不慢才怪了


你把结果集放到集合中,在把集合输入到excel文件
caili314 2009-12-10
  • 打赏
  • 举报
回复
难办. 不过这是一个典型的场景. 我的做法是收到http请求后, 启动一个job执行耗时的处理, 然后http立即返回. 客户端定时请求获取job状态(页面刷新或xmlhttp), 探测到job完成后, 启动文件下载. 可以用quartz的job, 或你自己写的job线程和job管理器.

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧