社区
Java EE
帖子详情
3万-10万数据导出excel
twinsshehp
2009-09-21 01:15:08
先从数据库查询出数据 保存到list然后写入excel这样的做法 很慢 很卡 很天真
...全文
631
27
打赏
收藏
3万-10万数据导出excel
先从数据库查询出数据 保存到list然后写入excel这样的做法 很慢 很卡 很天真
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
27 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Lorraine8
2011-09-14
打赏
举报
回复
求详解!!!!
[Quote=引用 1 楼 daisycool 的回复:]
分页每次读1000条写入,很快,很顺,很成熟
[/Quote]
twinsshehp
2009-10-07
打赏
举报
回复
[Quote=引用 24 楼 sqz10200 的回复:]
要导出你那么多的数据没有问题
第一:先看你喝数据库连接方式了
hibernate做起来存在缓存问题,我做的时候没解决掉,所以值成功导出了6W左右的数据
JDBC,JNDI都可以了··不存在缓存问题。
我是用POI进行导出,可能会比JExcel会慢一些,但是分Sheets导出没有问题,10W更多的我也导出过。
你想导出多少更多在于你的JVM,和样式的控制上,
如果不存在样式的控制,建议导出csv的格式,实际上都是Excel
而且会比POI导出要快。
关键在于你的代码上的控制··控制号了··就能导出··我当时导出了14个列的数据每次6W
10秒多,虽然慢了些··对于POI来说不错了··
你的那些数据也是OK的。
还有我告诉你一下理论上Excel最多可存放32个页吧,每页6。5W条
就是说100W数据页ok,但是想实现是不可能的···所以呢··你的10W没有问题的·
[/Quote]
导出CSV格式 怎么导出 我之前是用流导出的 没用POI 能给具体小例子吗 说了小弟还在练剑法阶段 大哥给个小例子先 我邮箱735062915@qq.com
ajixiea
2009-10-06
打赏
举报
回复
使用文件流写入Excel, 不要使用OLE写入!
sqz10200
2009-10-05
打赏
举报
回复
要导出你那么多的数据没有问题
第一:先看你喝数据库连接方式了
hibernate做起来存在缓存问题,我做的时候没解决掉,所以值成功导出了6W左右的数据
JDBC,JNDI都可以了··不存在缓存问题。
我是用POI进行导出,可能会比JExcel会慢一些,但是分Sheets导出没有问题,10W更多的我也导出过。
你想导出多少更多在于你的JVM,和样式的控制上,
如果不存在样式的控制,建议导出csv的格式,实际上都是Excel
而且会比POI导出要快。
关键在于你的代码上的控制··控制号了··就能导出··我当时导出了14个列的数据每次6W
10秒多,虽然慢了些··对于POI来说不错了··
你的那些数据也是OK的。
还有我告诉你一下理论上Excel最多可存放32个页吧,每页6。5W条
就是说100W数据页ok,但是想实现是不可能的···所以呢··你的10W没有问题的·
amdgaming
2009-10-05
打赏
举报
回复
代码的好坏 决定 你 导出质量啊。
xiaozhangnima
2009-10-05
打赏
举报
回复
学习
twinsshehp
2009-10-05
打赏
举报
回复
怎么导出 我要具体代码 小弟还在练剑法的阶段 还没达到练意境的境界 楼上的大哥 行行好
liulee
2009-09-29
打赏
举报
回复
导出文件为 cvs 格式, 直接用excel打开. 简单的文本流写入.
twinsshehp
2009-09-29
打赏
举报
回复
up
铁匠梁
2009-09-24
打赏
举报
回复
分批处理,一次10000条保存一次,建议多sheet操作,每个sheet的记录数最多65535,所以建议多建sheet。
urbutifl
2009-09-24
打赏
举报
回复
[Quote=引用 7 楼 twinsshehp 的回复:]
引用 1 楼 daisycool 的回复:
分页每次读1000条写入,很快,很顺,很成熟
大哥 别个就是要看这么多数据 要能分页 我会这么痛苦 你很幽默
[/Quote]
为什么不能分页?
twinsshehp
2009-09-24
打赏
举报
回复
up
lishigui
2009-09-24
打赏
举报
回复
最后一个参数是文件名,文件存放select语句,一个select一行,例如:
select * from dual where rownum >0 and rounum < 30000
selecdt * from dual where rownum >30000 and rounum < 60000
selecdt * from dual where rownum >60000 and rounum < 90000
lishigui
2009-09-24
打赏
举报
回复
上面代码希望对你有用
lishigui
2009-09-24
打赏
举报
回复
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import jxl.Workbook;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
public class bakup_bat {
private String file=null;
private String username="";
private String password="";
private String database="";
private int r=0;
private String url = "jdbc:oracle:thin:@skt00146.ebs.jcb.co.jp:1571:";
public bakup_bat(String username,String password,String database,String file){
this.username=username;
this.password=password;
this.database=database;
this.file = file;
run();
}
public void run(){
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection(url+database,username,password);
Statement stmt=conn.createStatement();
Date date=new Date();
WritableWorkbook book = Workbook.createWorkbook( new File(file.substring(0,file.indexOf("."))+""+date.getTime()+".xls"));
WritableSheet sheet = book.createSheet("lsgBackupDB" , 0 );
FileReader in = new FileReader (file);
BufferedReader inLine = new BufferedReader(in);
String line = inLine.readLine();
while(line!=null){
ResultSet rs = stmt.executeQuery(line.trim());
ResultSetMetaData meta;
Label label;
WritableFont fonthead;
WritableCellFormat formathead;
WritableFont fontsql;
WritableCellFormat formatsql;
meta = rs.getMetaData();
fonthead = new WritableFont(WritableFont.TIMES, 10 ,WritableFont.NO_BOLD);
formathead = new WritableCellFormat(fonthead);
formathead.setBackground(Colour.GREY_25_PERCENT);
fontsql = new WritableFont(WritableFont.TIMES, 12 ,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,Colour.BLUE);
formatsql = new WritableCellFormat(fontsql);
formatsql.setBackground(Colour.YELLOW);
label=new Label(0,r++,line.trim(),formatsql);
sheet.addCell(label);
int columnCount = meta.getColumnCount( );
for(int k=0;k<columnCount;k++){
label=new Label(k,r,meta.getColumnName(k+1),formathead);
sheet.addCell(label);
}
r++;
while(rs.next()){
for(int j=0;j<columnCount;j++){
if(rs.getString(j+1)==null){
label=new Label(j,r,"");
sheet.addCell(label);
}else{
label=new Label(j,r,rs.getString(j+1));
sheet.addCell(label);
}
}
r++;
}
r++;
line = inLine.readLine();
}
inLine.close();
in.close();
book.write();
book.close();
stmt.close();
conn.close();
} catch (IOException e) {
e.printStackTrace();
} catch (RowsExceededException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new bakup_bat(args[0],args[1],args[2],args[3]);
}
}
twinsshehp
2009-09-21
打赏
举报
回复
[Quote=引用 11 楼 sunnylyy 的回复:]
几万条估计大约要一分钟吧,可以友好一点做个进度条.
实现不行考虑使用下数据库本身提供的导出文件机制吧,也许能快点
[/Quote]
怎么使用 你不会是要我去教 客户 从数据库导出excel吧
sunnylyy
2009-09-21
打赏
举报
回复
几万条估计大约要一分钟吧,可以友好一点做个进度条.
实现不行考虑使用下数据库本身提供的导出文件机制吧,也许能快点
twinsshehp
2009-09-21
打赏
举报
回复
[Quote=引用 9 楼 sunnylyy 的回复:]
引用 7 楼 twinsshehp 的回复:
引用 1 楼 daisycool 的回复:
分页每次读1000条写入,很快,很顺,很成熟
大哥 别个就是要看这么多数据 要能分页 我会这么痛苦 你很幽默
不是让你搞分页处理,是让你每次从结果集里面取出1000条放到内存中,然后追加到文件中去,如此循环直到结果集为空。还明白?
[/Quote]
基本没什么用 依然这么慢 这么卡
sunnylyy
2009-09-21
打赏
举报
回复
[Quote=引用 7 楼 twinsshehp 的回复:]
引用 1 楼 daisycool 的回复:
分页每次读1000条写入,很快,很顺,很成熟
大哥 别个就是要看这么多数据 要能分页 我会这么痛苦 你很幽默
[/Quote]
不是让你搞分页处理,是让你每次从结果集里面取出1000条放到内存中,然后追加到文件中去,如此循环直到结果集为空。还明白?
twinsshehp
2009-09-21
打赏
举报
回复
[Quote=引用 2 楼 java2000_net 的回复:]
1 Excel最大允许6万条,所以你的10万条是不现实的,必须得分Sheet
2 先读取,再写入,从OO的角度讲,一点问题没有,但从实际应用的角度讲,你至少可以
a) 将输出流直接发给数据库导出层,其直接写出
b) 数据库层将数据另村为一个临时文件,导出层再操作这个文件好了(InputStrem 到 OutputStream)
[/Quote]
大侠按你的说法 可以间接的让数据库区导出 我连excle模板都不用读取了 怎么可以做到 具体代码
俺是菜菜 而且现在项目要的很急
加载更多回复(7)
C#快速
导出
Excel
文件(3秒可导
10
万
行
数据
)
C#快速
导出
Excel
文件,3秒可导
10
万
行
数据
js
导出
Excel
测试 demo【支持大量
数据
导出
,
10
w条
数据
大约3秒】
js
导出
Excel
【支持大量
数据
导出
,亲测】、支持IE噢
JFinal专题之POI-
Excel
导出
解决方案
JFinal POI-
Excel
导出
视频教程,该课程主要讲解JFinal
导出
Excel
文件的解决方案,主要使用POI
导出
,JFinal输出文件流下载到本地。
java多线程
导出
excel
(千
万
级别)优化
轻松解决普通poi形式
导出
Excel
的中出现的栈溢出问题,此资源可实现千
万
级
数据
分批
导出
csv文件,csv大
数据
量
导出
(千
万
级别,不会内存溢出),多线程
导出
,生产环境已经很稳定的使用着
图幅号工具 新老图幅号转换 注册机版
1、经纬度范围生成标准新、旧图幅号,包括1:
10
0
万
、1:50
万
、1:25
万
、1:
10
万
、1:5
万
、 1:2.5
万
、1:1
万
和1:5000比例尺的图幅号; 2、标准图幅号查询经纬度坐标和投影坐标(北京54、西安80坐标系); 3、标准新...
Java EE
67,513
社区成员
225,879
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章