许多网页中提供了下载数据表格的功能,但是又不能直接将数据库的表格提供给用户下载,因此常常将数据库中的表格转换为Excel或者pdf文件,Apache POI为Java程序提供了可以对Microsoft office文档进行读和写操作的api。本篇将总结从mysql数据库中将数据转出为Excel表格的过程。
一、创建一个java工程,名叫ReadDatabase,并且导入mysql和poi的相应jar包:
二、编写一个java类名叫ReadExcelFromDB,意为从数据库获取读取数据转为Excel。为了表格的美观,最好在类中提前给Excel表格设置一些属性,例如列宽,字体居中等等:
package com.sun.read;
import java.io.File;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
public class ReadExcelFromDB {
//字段名数组
// private static final String[] tableHeader={"id","username",
// "password","salt","email","mobile","valid","deptId",
// "createdTime","modifiedTime","createdUser","modifiedUser"};
//设置列宽
private static final int[] colWidth={2000,2000,5000,5000,
5000,5000,2000,2000,6000,6000,5000,5000};
//文件路径
private static String outPutFile="."+File.separator+"user.xls";
//数据库连接参数
private static String url="jdbc:mysql://localhost:3306/jtsys";
private static String user="root";
private static String password="root";
public static void main(String[] args) throws SQLException {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
//连接数据库查询数据
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection(url, user, password);
String sql="select * from sys_users";
ps=conn.prepareStatement(sql);
//获取结果集
rs = ps.executeQuery();
//用于获取字段的描述信息,比如字段名
ResultSetMetaData metaData = rs.getMetaData();
//创建workBook对象
HSSFWorkbook workBook=new HSSFWorkbook();
//在workBook对象中创建一张表格
HSSFSheet sheet= workBook.createSheet("sys_users");
//设置每一列的宽度
for(int i=0;i<colWidth.length;i++){
sheet.setColumnWidth(i, colWidth[i]);
}
//单元格样式对象
HSSFCellStyle cellStyle = workBook.createCellStyle();
//设置文本居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);
//创建第0行,作为表格的表头
HSSFRow row=sheet.createRow(0);
HSSFCell cell=null;
for(int i=0;i<colWidth.length;i++){
cell=row.createCell(i);
//动态获取字段名
cell.setCellValue(metaData.getColumnLabel(i+1));
cell.setCellStyle(cellStyle);
}
int rowIndex=1;
while(rs.next()){
//循环将查询出来的数据封装到表格的一行中
row=sheet.createRow(rowIndex);
for(int i=0;i<colWidth.length;i++){
cell=row.createCell(i);
cell.setCellValue(rs.getString(i+1));
cell.setCellStyle(cellStyle);
}
rowIndex++;
}
FileOutputStream fos=new FileOutputStream(outPutFile);
//输出流将文件写到硬盘
workBook.write(fos);
fos.flush();
fos.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
rs.close();
ps.close();
conn.close();
}
}
}
三、执行该类的main方法,可以在该路径下找到新生成的user.xls文件,本次测试将文件定义在本项目路径之下,打开文件以后可以发现mysql中的数据已经成功导入Excel文件: