《大数据导出方法计算机DelphiPerl_计算机-计算机原理.pdf》由会员分享,可在线阅读,更多相关《大数据导出方法计算机DelphiPerl_计算机-计算机原理.pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、大数量据导出设计 1 导出方法设计思路有以下几点 1、导出数据的格式采用 CSV 或者可转换 xls 的 htm格式 2、控制一次最大的导出数量,如果超过上限分多次导出。3、从数据库中读取数据后不放入集合类的容器,而是直接使用 10写入本地文 件,读取一条写入一条或者合并到一定数量批量写入。4、导出完成后提示下载链接,让用户自行下载,而不是采用原先直接放入 respo nse单出下载,以此减少数据流量加快导出速度。2 示例 2.1 小数据量的导出 商务领航原先采用的皆是此方法,先将数据从数据库中取出然后放入集合容 器中,最后再通过 response导出数据流,此方法优点是适合小量数据的导出,而
2、 且可以做的比较通用。不足之处是资源占用较大,大数据量时 jvm 内存占用高。public static void testExport1()DBCo nnEX db=null;BufferedWriter buf=null;String sql=select*from biz_ moon _log t order by t.id desc;File f=new File(d:/log2.csv);Connection conn=n ull;Stri ngBuffer stb=null;List list=null;long star=System.curre ntTimeMillis();S
3、ystem.out.pri ntln(star);try list=new ArrayList();buf=new BufferedWriter(new FileWriter(f);db=new DBC onn EX();Stateme nt stmt=conn.createStateme nt();ResultSet rs=stmt.executeQuery(sql);while(rs.next()stb=new Stri ngBuffer();stb.appe nd(rs.getStri ng(1)+,);stb.appe nd(rs.getStri ng(2)+,);stb.appe n
4、d(rs.getStri ng(3)+,);stb.appe nd(rs.getStri ng(4)+,);stb.appe nd(rs.getStri ng(5)+,);stb.appe nd(rs.getStri ng(6);list.add(stb.toStri ng();/buf.write(stb.toStri ng();stb=nu II;for(i nt i=O;ilist.size();i+)Stri ng s=(Stri ng)list.get(i);buf.write(s);buf.close();catch(Exceptio n e)e.pri ntStackTrace(
5、);fin ally Util.disC onn ecti on(conn);long end=System.curre ntTimeMillis();System.out.pri ntln(en d);System.out.println(总耗时:+(end-star)+毫秒);2.2 CSV 格式导出 此方法针对前一方法进行了改进,不需要将数据缓存在集合类的容器中,从 数据库读取数据时直接调用 io 导出,此方法导出数据较快,占用资源少。但不 够通用,只是方法过程的改进,格式也仅是纯文本。但纯文本的 CSV 格式可以 被 excell 识别打开。public static void tes
6、tExport2()DBCo nnEX db=null;BufferedWriter buf=null;如果超过上限分多次导出从数据库中读取数据后不放入集合类的容器而是直接使用写入本地文件读取一条写入一条或者合并到一定数量批量写入导出完成后提示下载链接让用户自行下载而不是采用原先直接放入单出下载以此减少数容器中最后再通过导出数据流此方法优点是适合小量数据的导出而且可以做的比较通用不足之处是资源占用较大大数据量时内存占用高总耗时毫秒格式导出此方法针对前一方法进行了改进不需要将数据缓存在集合类的容器中从数据纯文本的格式可以被识别打开添加首行的标题内容序号标题内容时间备注末尾如果有合计项合计金额总耗
7、时毫秒格式导出引方法跟第二种方法类似只是导出格式是可以转换为的甚至可以直接命名为扩展名的文件金华市锦华园度假村 File f=new File(d:/log1.csv);Connection conn=n ull;Stri ngBuffer stb=null;long star=System.curre ntTimeMillis();System.out.pri ntln(star);try buf=new BufferedWriter(new FileWriter(f);/添加首行的标题内容 stb.append(序号 ID,标题,内容,时间,备注);buf.write(stb.toStri
8、 ng();db=new DBC onn EX();conn=db.getC onn ecti on();Stateme nt stmt=conn.createStateme nt();ResultSet rs=stmt.executeQuery(sql);while(rs.next()stb=new Stri ngBuffer();stb.appe nd(rs.getStri ng(1)+,);stb.appe nd(rs.getStri ng(2)+,);stb.appe nd(rs.getStri ng(3)+,);stb.appe nd(rs.getStri ng(4)+,);stb.
9、appe nd(rs.getStri ng(5)+,);stb.appe nd(rs.getStri ng(6);buf.write(stb.toStri ng();stb=nu II;末尾如果有合计项 stb.append(合计,-,-,-,金额);buf.write(stb.toStri ng();buf.close();stb=n ull;catch(Exceptio n e)e.pri ntStackTrace();fin ally Util.disC onn ecti on(conn);long end=System.curre ntTimeMillis();System.out.p
10、ri ntln(en d);System.out.println(总耗时:+(end-star)+毫秒);如果超过上限分多次导出从数据库中读取数据后不放入集合类的容器而是直接使用写入本地文件读取一条写入一条或者合并到一定数量批量写入导出完成后提示下载链接让用户自行下载而不是采用原先直接放入单出下载以此减少数容器中最后再通过导出数据流此方法优点是适合小量数据的导出而且可以做的比较通用不足之处是资源占用较大大数据量时内存占用高总耗时毫秒格式导出此方法针对前一方法进行了改进不需要将数据缓存在集合类的容器中从数据纯文本的格式可以被识别打开添加首行的标题内容序号标题内容时间备注末尾如果有合计项合计金额总
11、耗时毫秒格式导出引方法跟第二种方法类似只是导出格式是可以转换为的甚至可以直接命名为扩展名的文件金华市锦华园度假村2.3 Xsl 格式导出 引方法跟第二种方法类似,只是导出格式是可以转换为 xls 的 htm,甚至可以 直接命名为 xls 扩展名的文件。public static void testExport3()DBC onnEX db=n ull;try db=new DBC onn EX();long starttime=System.currentTimeMillis();Connection conn=db.getC onnection();BufferedReader reader
12、=new BufferedReader(new In putStreamReader(new File In putStream(E:/aa.xls);PrintWriter pw=new PrintWriter(new FileWriter(E:/new.xls);String line=reader.readLine();Strin gBuffer temp=new Stri ngBuffer();String originalText=;while(li ne!=n ull)temp.appe nd(l in e);line=reader.readL in e();origi nalTe
13、xt=temp.toStri ng();Stri ng regex=(.*)(+1+mmsw 金华市锦华园度假村有限公司 系统管理员+731+101)(.*);Pattern patter=Ppile(regex);Matcher match=patter.matcher(orig in alText);String head=n ull;/String body=n ull;Stri ng tail=n ull;while(match.fi nd()head=match.group(1);/body=match.group(2);tail=match.group(3);Stri ng t1=
14、Stri ng t2=;String t3=;如果超过上限分多次导出从数据库中读取数据后不放入集合类的容器而是直接使用写入本地文件读取一条写入一条或者合并到一定数量批量写入导出完成后提示下载链接让用户自行下载而不是采用原先直接放入单出下载以此减少数容器中最后再通过导出数据流此方法优点是适合小量数据的导出而且可以做的比较通用不足之处是资源占用较大大数据量时内存占用高总耗时毫秒格式导出此方法针对前一方法进行了改进不需要将数据缓存在集合类的容器中从数据纯文本的格式可以被识别打开添加首行的标题内容序号标题内容时间备注末尾如果有合计项合计金额总耗时毫秒格式导出引方法跟第二种方法类似只是导出格式是可以转换
15、为的甚至可以直接命名为扩展名的文件金华市锦华园度假村Stri ng t4=;Stri ngBufer sbHead=new Stri ngBufer();Stri ngBufer sbBody=new Stri ngBufer();Stri ngBufer sbTail=new Stri ngBufer();sbHead.appe nd(head);pw.write(sbHead.toStri ng();pw.flush();String cusid=n ull;String comp name=nu II;String compcode=n ull;String user name=n ul
16、l;String areacode=n ull;Stri ng cityid=n ull;int totalNum=0;int in dex=0;Stri ngBufer sql=new Stri ngBufer();sql.appe nd(SELECT a.COMPCODE,a.COMPNAME,c.CITYID,c.AREACODE,a.CUSID,a.USERNAME);sql.appe nd(FROM BIZ_COMP_INFO a);sql.append(LEFT OUTER join BIZ_CUST_BASE b ON a.CUSID=b.ID);sql.appe nd(LEFT
17、 OUTER joi n BIZ_CUST_EXPANDINFO c ON a.CUSID=c.CUSTID);sql.appe nd(WHERE a.ENABLED=1);Stateme nt stmt=conn.createStateme nt();ResultSet rs=stmt.executeQuery(sql.toStri ng();while(rs.next()in dex+;totalNum+;cusid=Stri ng.valueOf(rs.getLo ng(CUSID);compcode=rs.getStri ng(COMPCODE);comp name=rs.getStr
18、i ng(COMPNAME);username=rs.getStri ng(USERNAME);areacode=rs.getStri ng(AREACODE);cityid=101;sbBody.appe nd(t1+cusid);sbBody.appe nd(t2+compcode);如果超过上限分多次导出从数据库中读取数据后不放入集合类的容器而是直接使用写入本地文件读取一条写入一条或者合并到一定数量批量写入导出完成后提示下载链接让用户自行下载而不是采用原先直接放入单出下载以此减少数容器中最后再通过导出数据流此方法优点是适合小量数据的导出而且可以做的比较通用不足之处是资源占用较大大数据量时
19、内存占用高总耗时毫秒格式导出此方法针对前一方法进行了改进不需要将数据缓存在集合类的容器中从数据纯文本的格式可以被识别打开添加首行的标题内容序号标题内容时间备注末尾如果有合计项合计金额总耗时毫秒格式导出引方法跟第二种方法类似只是导出格式是可以转换为的甚至可以直接命名为扩展名的文件金华市锦华园度假村sbBody.appe nd(t2+comp name);sbBody.appe nd(t2+user name);sbBody.appe nd(t3+areacode);sbBody.appe nd(t3+cityid);sbBody.appe nd(t4);compcode=comp name=cu
20、sid=user name=areacode=cityid=n ull;if(in dex=20000)pw.write(sbBody.toStri ng();pw.flush();sbBody=nu II;sbBody=new Stri ngBuffer();in dex=0;if(totalNum%60000=0)pw.pri nt(sbTail.toStri ng();pw.flush();pw.close();pw=new Prin tWriter(new FileWriter(E:/new+totalNum/60000+.xls);pw.write(sbHead.toStri ng(
21、);pw.flush();if(index%20000!=0)pw.write(sbBody.toStri ng();pw.flush();System.out.pri ntln(totalNum=+totalNum);sbTail.appe nd(tail);pw.pri nt(sbTail.toStri ng();pw.flush();pw.close();reader.close();sbHead=sbBody=sbTail=sql=n ull;rs.close();conn.close();long endtime=System.currentTimeMillis();如果超过上限分多
22、次导出从数据库中读取数据后不放入集合类的容器而是直接使用写入本地文件读取一条写入一条或者合并到一定数量批量写入导出完成后提示下载链接让用户自行下载而不是采用原先直接放入单出下载以此减少数容器中最后再通过导出数据流此方法优点是适合小量数据的导出而且可以做的比较通用不足之处是资源占用较大大数据量时内存占用高总耗时毫秒格式导出此方法针对前一方法进行了改进不需要将数据缓存在集合类的容器中从数据纯文本的格式可以被识别打开添加首行的标题内容序号标题内容时间备注末尾如果有合计项合计金额总耗时毫秒格式导出引方法跟第二种方法类似只是导出格式是可以转换为的甚至可以直接命名为扩展名的文件金华市锦华园度假村Syste
23、m.out.println(”耗时+(endtime-starttime)/1000+秒);/System.gc();catch(Excepti on e)e.pri ntStackTrace();Whe n you are old and grey and full of sleep,And no ddi ng by the fire,take dow n this book,And slowly read,and dream of the soft look Your eyes had once,and of their shadows deep;How many loved your m
24、ome nts of glad grace,And loved your beauty with love false or true,But one man loved the pilgrim soul in you,And loved the sorrows of your cha nging face;And bending dow n beside the glow ing bars,Murmur,a little sadly,how love fled And paced upon the mountains overhead And hid his face amid a crow
25、d of stars.The furthest dista nee in the world Is not betwee n life and death But whe n I sta nd in front of you Yet you dont know that I love you.The furthest dista nee in the world 如果超过上限分多次导出从数据库中读取数据后不放入集合类的容器而是直接使用写入本地文件读取一条写入一条或者合并到一定数量批量写入导出完成后提示下载链接让用户自行下载而不是采用原先直接放入单出下载以此减少数容器中最后再通过导出数据流此方法
26、优点是适合小量数据的导出而且可以做的比较通用不足之处是资源占用较大大数据量时内存占用高总耗时毫秒格式导出此方法针对前一方法进行了改进不需要将数据缓存在集合类的容器中从数据纯文本的格式可以被识别打开添加首行的标题内容序号标题内容时间备注末尾如果有合计项合计金额总耗时毫秒格式导出引方法跟第二种方法类似只是导出格式是可以转换为的甚至可以直接命名为扩展名的文件金华市锦华园度假村Is not whe n I sta nd in front of you Yet you cant see my love But whe n un doubtedly knowing the love from both Y
27、et cannot be together.The furthest dista nee in the world Is not being apart while being in love But whe n I pla inly cannot resist the year ning Yet prete nding you have n ever bee n in my heart.The furthest dista nee in the world Is not struggli ng aga inst the tides But using on es in differe nt
28、heart To dig an un crossable river For the one who loves you.倚窗远眺,目光目光尽处必有一座山,那影影绰绰的黛绿色的影,是春天的 颜色。周遭流岚升腾,没露出那真实的面孔。面对那流转的薄雾,我会幻想,那 里有一个世外桃源。在天阶夜色凉如水的夏夜,我会静静地,静静地,等待一场 流星雨的来临 许下一个愿望,不乞求去实现,至少,曾经,有那么一刻,我那还未枯萎的,青春的,诗意的心,在我最美的年华里,同星空做了一次灵魂的交流 秋日里,阳光并不刺眼,天空是一碧如洗的蓝,点缀着飘逸的流云。偶尔,一片飞舞的落叶,会飘到我的窗前。斑驳的印迹里,携刻着深秋
29、的颜色。在一个 落雪的晨,这纷纷扬扬的雪,飘落着一如如果超过上限分多次导出从数据库中读取数据后不放入集合类的容器而是直接使用写入本地文件读取一条写入一条或者合并到一定数量批量写入导出完成后提示下载链接让用户自行下载而不是采用原先直接放入单出下载以此减少数容器中最后再通过导出数据流此方法优点是适合小量数据的导出而且可以做的比较通用不足之处是资源占用较大大数据量时内存占用高总耗时毫秒格式导出此方法针对前一方法进行了改进不需要将数据缓存在集合类的容器中从数据纯文本的格式可以被识别打开添加首行的标题内容序号标题内容时间备注末尾如果有合计项合计金额总耗时毫秒格式导出引方法跟第二种方法类似只是导出格式是可
30、以转换为的甚至可以直接命名为扩展名的文件金华市锦华园度假村千年前的洁白。窗外,是未被污染的银 白色世界。我会去迎接,这人间的圣洁。在这流转的岁月里,有着流转的四季,还有一颗流转的心,亘古不变的心。如果超过上限分多次导出从数据库中读取数据后不放入集合类的容器而是直接使用写入本地文件读取一条写入一条或者合并到一定数量批量写入导出完成后提示下载链接让用户自行下载而不是采用原先直接放入单出下载以此减少数容器中最后再通过导出数据流此方法优点是适合小量数据的导出而且可以做的比较通用不足之处是资源占用较大大数据量时内存占用高总耗时毫秒格式导出此方法针对前一方法进行了改进不需要将数据缓存在集合类的容器中从数据纯文本的格式可以被识别打开添加首行的标题内容序号标题内容时间备注末尾如果有合计项合计金额总耗时毫秒格式导出引方法跟第二种方法类似只是导出格式是可以转换为的甚至可以直接命名为扩展名的文件金华市锦华园度假村