FileOutputStream fo = null;
BufferedReader in = null;
FileOutputStream f = null;
ZipOutputStream zipout = null;
FileInputStream inStream = null;
ServletOutputStream outStream = null;
HttpServletResponse response = request.getResponse();
try {
response.setContentType("text/plain;charset=GB2312");
if (export.equals("txt")) {
response.setHeader("Content-disposition",
"attachment; filename="
+ new String("Query".getBytes("UTF-8"),
"iso8859-1") + ".zip"); //导出zip压缩文件
} else {
response.setHeader("Content-disposition",
"attachment; filename="
+ new String("Query".getBytes("UTF-8"),
"iso8859-1") + ".zip");
}
outStream = response.getOutputStream();
CheckedOutputStream ch = new CheckedOutputStream(outStream,
new CRC32());
zipout = new ZipOutputStream(new BufferedOutputStream(ch)); //把数据经过压缩直接写到response里面,避免中间文件生成,提高效率
if (export.equals("txt")) { //压缩包文件格式
zipout.putNextEntry(new ZipEntry("Query.txt"));
}else{
zipout.putNextEntry(new ZipEntry("Query.xls"));
}
int pageSize = endIndex > 100000 ? 100000 : endIndex;
if (endIndex == 1) {
endIndex = 2;
}
for (int i = startIndex; i < endIndex; i += pageSize) { //对于大数据量的导出,采取分批查询的方式,这里每次查询取100000条记录
paraMap.put("startIndex", i);
paraMap.put("endIndex", i + pageSize - 1);
doExport(paraMap, zipout); //在这个函数中把从数据库查询出来的数据直接写到zipoutStream输出流中,
zipout.flush();
outStream.flush(); //每100000条就把response缓冲区数据推送到客户端,response可以使用flush将数据库缓存到客户端,减少服务器端内存压力,
}
zipout.close();
outStream.close(); //关闭response
} catch (Exception e) {
// e.printStackTrace();
} finally {
}
对于大数据量导出,主要采取几种方案:
1.分批查询数据库,如果数据量上百万,如果一次性读出来,会严重影响服务器性能,增加服务器内存压力,分批导出,分批处理,可以使内存使用比较平稳,不会一次性占用大量内存。
2.压缩处理,导出的数据经过压缩直接写到response里面,一般的文本压缩率非常高,压缩后的文件会小很多,而且也不要先把数据写到临时文件,再做压缩,直接压缩写到response即可。
doExport(paraMap, zipout); //在这个函数中把从数据库查询出来的数据直接写到zipoutStream输出流中,这里往zipout写要这样,zipout.write("hello".getBytes());,要以字节流写到zipoutstream中。
3. zipout.flush();
outStream.flush(); //每100000条就把response缓冲区数据推送到客户端,response可以使用flush将数据库缓存到客户端,减少服务器端内存压力,
分批查询数据库把数据写到response时要用flush,将数据缓冲到客户端,这样有两个好处;一是可以把数据推送到客户端,减少服务器端内存压力,避免影响服务器性能;二是如果本次请求需要查询出几百万的数据,如果不flush,那么服务器端的本次请求仍然会去数据库查询这几百万的数据,这会严重的影响服务器端的性能,从数据库查询出这几百万的数据,而客户端已经取消了本次请求,这样就不能再让服务器继续处理下去,使用flush可以检测客户端的请求是否还存在,不存在会抛出异常,用flush可以捕获到该异常及时中止本次请求,不再去查询数据库,不再处理本次请求。
分享到:
相关推荐
目前java框架中能够生成excel文件的的确不少,但是,能够生成大数据量的excel框架,我倒是没发现,一般数据量大了都会出现内存溢出,所以,生成大数据量的excel文件要返璞归真,用java的基础技术,IO流来实现。...
可以把oracle中大量数据导出为txt格式,便于在线下载、存储等后续处理。已经测试过,可以执行。
(1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢?如果碰到需要导出大量数据又该如何操作呢? 本文主要解决以上两个问题。 (2)...
但有时为了更快速地插入大批量数据或交换数据,需要从文本中导入数据或导出数据到文本。 一、 建立测试表,准备数据 首先建立一个用于测试的表示学生信息的表,字段有id、姓名、年龄、城市、薪水。Id和姓名不 能为...
主要介绍了Java实现从数据库导出大量数据记录并保存到文件的方法,涉及Java针对数据库的读取及文件写入等操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
从单个数据表根据第一列数据的不同,提取并保存成单个的txt文件。...其中涉及了OLE方式的xls文件打开,单个数据表选择,表格数据SafeArray方式读取,最后是保存成txt文本文件,数据是石油行业通用的井斜数据格式。
全面支持安卓、苹果手机(无需 ROOT 及越狱)一键导出微信备份到电脑,支持导出 Html、Excel、Txt 等格式(包括:文本、语音、视频、文件等),方便微信备份打印操作,查看、导出数据时还可以设置时间范围,让管理浏览...
最快的数据导出为文本工具,针对导出大批量数据,效率超过,大型数据库系统好用
使用MySQL的SELECT INTO OUTFILE 、LOAD DATA INFILE快速导出导入数据 LOAD DATA INFILE语句从一个文本文件中以很高的速度读入一个表中。MySQL官方文档也说明了,该方法比一次性插入一条数据性能快20倍。
这将极大地简化大数据量处理的过程,提高工作效率。此外,导出Excel技术还可以帮助我们生成具有格式化样式和公式的Excel报表,使数据的展示更加直观、易读。 然后,我将深入探讨导出Excel技术的实现方法和工具。在...
TIA博途V17中DB块如何导出成源文件或XML文件或EXCEL中? 博途中导出DB块的3种方法介绍。
二、思路:将数据存储到一个.xls的文件内,实际写入的是可以通过excel打开的html文本文件。由于文本文件可以进行续写,可以避免内存溢出。 三、优点:结合stringtemplate模板引擎库生成速度快,可以定义excel格式。 ...
在日常维护工作当中经常会需要对数据进行导出操作,而mysqldump是导出数据过程中使用非常频繁的一个工具;它自带的功能参数非常多,文章中会列举出一些常用的操作,在文章末尾会将所有的参数详细说明列出来。 语法...
从历史新闻数据库中抽取与某支股票相关的所有新闻文本,利用该支股票的日线数据(比如某一天发布的消息,在设定N天后如果价格上涨则认为是利好消息,反之则是利空消息)给每条新闻贴上“利好”和“利空”的标签,并...
我们用excel做了一套完整的台帐系统,但上报报表时发现,我们用了大量的链接,如果单独复制到新工作表,链接中断数据会出错,这个宏提出了解决方案
基本上,一般的博客/论坛数据都不能保证这种纯净性,谁也不能保证你的文章中不会混合使用简体和繁体文字,所以这种跨字符集的导入导出数据难度很大.绝对不要轻易尝试这种游戏.目前的主流论坛如Discuz、PHPWind等都提供...
数据收集和标注:收集包含命名实体的文本数据,并为每个实体标注相应的标签(实体类型)。 特征提取:从文本数据中提取有用的特征,如词性、词形、上下文等。这些特征将作为输入提供给模型。 模型训练:使用标注好的...
4.2.3、按用户自定义条件进行报表查询、归类查询及数据导出 4.3、按报表条件生成统计数据 4.3.1 自定义报表统计项 4.3.2 自定义报表统计界面 4.3.3生成报表统计界面 4.4、实现报表数据的定时推送功能 4.4.1 定义邮件...
本文实例讲述了Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法。分享给大家供大家参考。具体实现方法如下: # Export Oracle database tables to CSV files # FB36 - 201007117 import sys import csv ...