java实现的数据库导出成excel功能

目前用的是poi来实现的导出操作

ExcelFile 类,用来封装了执行操作的过程

package poi;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
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;


public class ExcelFile {
/**
* 写Excel操作
* @param fileName
* 文件名,文件要写入到的盘符和文件名,但不需要后缀名
* @param fieldName
* 表头名
* @param res
* 数据对象,java.sql.ResultSet
*/
public static void writeExcel(String fileName,String [] fieldName,java.sql.ResultSet res)
{
FileOutputStream fos =null;
try {
fos = new FileOutputStream(fileName+".xls");
HSSFWorkbook wb = new HSSFWorkbook(); 
HSSFCellStyle style3 = wb.createCellStyle(); // 创建单元格风格. 
    style3.setAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中 
    style3.setAlignment(HSSFCellStyle.ALIGN_CENTER); // /水平居中 
    HSSFSheet s = wb.createSheet(); 
    createTag(fieldName,s,style3);//写表格的头部
    createValue(res,s,style3);//获取数据集,然后获得数据,写文件
    wb.write(fos); 
    fos.close(); 
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally
{
if(fos!=null)
{
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

/**
* 创建表格表头
* @param tags
* @param s
*/
private  static void createTag(String [] tags,HSSFSheet s, HSSFCellStyle style3)
{

HSSFRow row = s.createRow(0); 
       HSSFCell cell = null;
      
       // cell0.setCellType() 
       for(int i=0;i<tags.length;i++)
       {
        cell = row.createCell((short)i);
        cell.setEncoding(HSSFCell.ENCODING_UTF_16);
        cell.setCellStyle(style3);
        cell.setCellValue(tags[i]);
       }
}


/**
* 设置表格内容
* @param res
* @param s
*/
private  static void createValue(java.sql.ResultSet res,HSSFSheet s,HSSFCellStyle style3)
{
try {
int flag = 1;
int count = res.getMetaData().getColumnCount();
HSSFRow row = null; 
HSSFCell cell = null;
while(res.next())
{
row = s.createRow(flag);
for(int i=1;i<=count;i++)
{
cell = row.createCell((short)(i-1));
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellStyle(style3);
Object obj = res.getObject(i);
cell.setCellValue(obj+"");
}
flag++;
}
} catch (SQLException e) {
e.printStackTrace();
}


}


}

ExcelFileText 类用来测试:

package poi;


import java.sql.ResultSet;


import dao.PageMarDAO;
import dao.PageMarDAO.BaseDao;
import dao.PageMarDAO.ConnectionType;
import poi.ExcelFile;


public class ExcelFileText {
public static void main(String [] args)
{
PageMarDAO dao = PageMarDAO.getInstance(ConnectionType.jdbc);
String sql = "SELECT  * FROM  <table_name>";
BaseDao b = dao.getBaseDAO();
ResultSet rs = b.getResultSet(sql);
ExcelFile.writeExcel("F://text", new String[]{"列1","列2","列3","列4","列5","列6"}, rs);
}
}


在此基础上结合smartUpload实现数据的下载功能

 <body leftmargin="0" topmargin="0">
  <%
  System.out.println("正在检索数据...");
  if(strSQL == null || "".equals(strSQL))return;  ----------------------------------------strSQL 这里就是执行的数据库操作
  System.out.println("HTMLRender=="+chartId+"====="+strSQL);
  DBConnection dbConn = new DBConnection();
  connection = dbConn.getConnection();
  statement = connection.createStatement();
  rs = statement.executeQuery(strSQL);
  System.out.println("数据检索完毕...");
  FileOutputStream fos =null;
  System.out.println("创建Excel临时文件...");
  chartTitle = chartTitle == null || "".equals(chartTitle) ? "详细列表" : chartTitle;
  System.out.println("数据检索完毕..." + chartTitle);
  String fileName = "F:\\"+chartTitle+".xls";
  try{
  if(strSQL != null && !"".equals(strSQL)){
  fos = new FileOutputStream(fileName);
HSSFWorkbook wb = new HSSFWorkbook(); 
HSSFCellStyle style3 = wb.createCellStyle(); // 创建单元格风格. 
    style3.setAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中 
    style3.setAlignment(HSSFCellStyle.ALIGN_CENTER); // /水平居中 
    HSSFSheet s = wb.createSheet(); 
    HSSFRow row = s.createRow(0); 
       HSSFCell cell = null;
       String cols = new String[]{} ------------------------------------------------------cols 这里对应的是头部数组
       System.out.println("创建Excel临时文件的头部...");
       for(int i=0;i<cols.length;i++)
       {
        cell = row.createCell((short)i);
        cell.setEncoding(HSSFCell.ENCODING_UTF_16);
        cell.setCellStyle(style3);
        cell.setCellValue(cols[i]);
       }
   
//int i = 0;
int flag = 1;
int count = rs.getMetaData().getColumnCount();
HSSFRow row1 = null; 
HSSFCell cell1 = null;
System.out.println("向创建好的Excel临时文件中写入数据...");
while(rs.next())
{
row1 = s.createRow(flag);
for(int i=0;i<colens.length;i++)
{
cell1 = row1.createCell((short)i);
cell1.setEncoding(HSSFCell.ENCODING_UTF_16);
cell1.setCellStyle(style3);
Object obj = rs.getObject((i+1));
cell1.setCellValue(obj+"");
}
flag++;
}

    wb.write(fos); 
    fos.close(); 
  }
  System.out.println("下载文件...");
  java.io.File file = new java.io.File(fileName);
  if(file.exists()){
  out.clear();   
  out = pageContext.pushBody();  
  // 新建一个SmartUpload对象
  SmartUpload su = new SmartUpload();
  // 初始化
  su.initialize(pageContext);
  // 设定contentDisposition为null以禁止浏览器自动打开文件,
  //保证点击链接后是下载文件。若不设定,则下载的文件扩展名为
  //doc时,浏览器将自动用word打开它。扩展名为pdf时,
  //浏览器将用acrobat打开。
  su.setContentDisposition(null);
  // 下载文件
  su.downloadFile(fileName);
  System.out.println("文件下载成功,删除临时文件...");
  file.delete();
  }
  }catch(Exception e){
  e.printStackTrace();
  }
  %>
  
</body>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值