1 Excel最大允许6万条,所以你的10万条是不现实的,必须得分Sheet 2 先读取,再写入,从OO的角度讲,一点问题没有,但从实际应用的角度讲,你至少可以 a) 将输出流直接发给数据库导出层,其直接写出 b) 数据库层将数据另村为一个临时文件,导出层再操作这个文件好了(InputStrem 到 OutputStream)
} public static void main(String[] args) { new bakup_bat(args[0],args[1],args[2],args[3]); }}
最后一个参数是文件名,文件存放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
2 先读取,再写入,从OO的角度讲,一点问题没有,但从实际应用的角度讲,你至少可以
a) 将输出流直接发给数据库导出层,其直接写出
b) 数据库层将数据另村为一个临时文件,导出层再操作这个文件好了(InputStrem 到 OutputStream)
大侠按你的说法 可以间接的让数据库区导出 我连excle模板都不用读取了 怎么可以做到 具体代码
俺是菜菜 而且现在项目要的很急
怎么使用 你不会是要我去教 客户 从数据库导出excel吧
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]);
}}
selecdt * from dual where rownum >30000 and rounum < 60000
selecdt * from dual where rownum >60000 and rounum < 90000
hibernate做起来存在缓存问题,我做的时候没解决掉,所以值成功导出了6W左右的数据
JDBC,JNDI都可以了··不存在缓存问题。我是用POI进行导出,可能会比JExcel会慢一些,但是分Sheets导出没有问题,10W更多的我也导出过。你想导出多少更多在于你的JVM,和样式的控制上,如果不存在样式的控制,建议导出csv的格式,实际上都是Excel而且会比POI导出要快。关键在于你的代码上的控制··控制号了··就能导出··我当时导出了14个列的数据每次6W10秒多,虽然慢了些··对于POI来说不错了··你的那些数据也是OK的。
还有我告诉你一下理论上Excel最多可存放32个页吧,每页6。5W条就是说100W数据页ok,但是想实现是不可能的···所以呢··你的10W没有问题的·
导出CSV格式 怎么导出 我之前是用流导出的 没用POI 能给具体小例子吗 说了小弟还在练剑法阶段 大哥给个小例子先 我邮箱[email protected]