public void export() throws Exception{
//声明需要导出的数据库
String dbName = "contacts";
//声明book
HSSFWorkbook book = new HSSFWorkbook();
//获取连接,从而得到数据库的元数据
Connection con = DataSourceUtils.getConn();
//声明一个staatement
Statement st = con.createStatement();
//获取元数据
DatabaseMetaData dmd = con.getMetaData();
//获取对应的数据库中有多少表
ResultSet rs = dmd.getTables(dbName, dbName, null, new String[]{"TABLE"});
//声明一个list集合存放所有的表名
List<String> tables = new ArrayList<String>();
//获取所有的表名 ,将表名都存放到list中
while(rs.next()){
String tableName = rs.getString("TABLE_NAME");
tables.add(tableName);
}
//一个表名就是一个sheet,下面是对sheet的操作
for(String tableName:tables){
//创建一个sheet
HSSFSheet sheet = book.createSheet(tableName);
//声明sql语句,将表里面的所有数据找出来
String sql = "select * from " + tableName;
//在mysql里面,结果集嵌套是不会有问题的,但是在oracle里面的结果集嵌套是会存在问题的,建议不要使用结果集嵌套
//获取表里面的数据
rs = st.executeQuery(sql);
//根据查询的结果,分析结果集的元数据
ResultSetMetaData rsmd = rs.getMetaData();
//获取有多少列
int cols = rsmd.getColumnCount();
//创建第一行
HSSFRow row = sheet.createRow(0);
//根据列的个数获取每个列对应的列名
for(int i=0;i<cols; i++){
String colName = rsmd.getColumnName(i+1);
//创建一个新的列
HSSFCell 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);
HSSFCell cel = row.createCell(i);
//放数据
cel.setCellValue(val);
}
}
}
con.close();
book.write(new FileOutputStream("d:/a/"+dbName+".xls"));
}