HSSFWorkbook与XSSFWorkbook的区别
- HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls;
- XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx;
数据库表结构如下:
导出效果如下:
以下poi将数据库中的数据导入excel中的代码:
public static void export() throws Exception {
Connection conn = DBUtils.getConn();
//获得数据库的结构
DatabaseMetaData dmd = conn.getMetaData();
//查询数据库中所有的表名 (为配置信息里面的配置的相关数据库)
ResultSet rs = dmd.getTables(null,null,"%", new String[]{"TABLE"});
//将所有的表名加入到tables结合里面
List<String> tables = new ArrayList<String>();
while(rs.next()){
String tableName = rs.getString("TABLE_NAME");
tables.add(tableName);
}
//获得对象XSSFWorkbook,并且通过数据库获得的表名创建表单
XSSFWorkbook book=new XSSFWorkbook();
for(String tableName:tables){
XSSFSheet sheet = book.createSheet(tableName);
//通过表名查询该表所有的内容,获得结果集
String sql="select * from "+tableName;
PreparedStatement pstmt = DBUtils.getPstmt(sql);
rs = pstmt.executeQuery(sql);
//获得结果集的结构
ResultSetMetaData rsmd = rs.getMetaData();
//获得该结果集列的数量
int cols = rsmd.getColumnCount();
//通过数据库中的列名创建与之对应的excel列名 该列名为第一行
XSSFRow row = sheet.createRow(0);
for(int i=0;i<cols;i++){
//获得数据库中的列名 注意数据库列的名字是从1开始算的
String colName = rsmd.getColumnName(i+1);
//创建一个新的列
XSSFCell cell = row.createCell(i);
//赋值
cell.setCellValue(colName);
}
//遍历数据 将其填充在所有单元格里面
int index=1;
while(rs.next()){
row = sheet.createRow(index++);
for(int i=0;i<cols;i++){
//获取数据库中每一行的数据
String val = rs.getString(i+1);
//创造一个列
XSSFCell cell = row.createCell(i);
cell.setCellValue(val);
}
}
}
conn.close();
book.write(new FileOutputStream("D:/e.xlsx"));
System.out.println("导出成功");
}