java、Extjs导出数据库里的数据至Excel并下载至本地进行数据备份方法之二——使用Action
2014-05-13 13:22
1291 查看
辅助类,导出Excel文件功能的封装类:
DB的封装:
Action中对导出功能函数的调用:
Extjs代码中的调用语句:
package com.otdrmsys.util; import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.struts2.ServletActionContext; public class ExportExcel { public static final Logger errorLogger = Logger.getLogger("dailyError"); public static final Logger infoLogger = Logger.getLogger("dailyInfo"); public static void exportExcel(String fileName, String[] columnItems, String sql) { HttpServletResponse response = ServletActionContext.getResponse(); Connection conn = DB.createConn(); PreparedStatement ps = DB.prepare(conn, sql); ResultSet rs = null; try { rs = ps.executeQuery(sql); } catch (SQLException e) { e.printStackTrace(); } HSSFWorkbook workbook = new HSSFWorkbook(); try { HSSFSheet sheet = workbook.createSheet(); createTag(columnItems, sheet);// 写表格的列名 createValue(rs, sheet);// 获取数据集,然后获得数据,写文件 //通过Response把数据以Excel格式保存 response.reset(); response.setContentType("application/msexcel;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=\"" + new String((fileName + ".xls").getBytes("GBK"),"ISO8859_1") + "\""); OutputStream outputStream = response.getOutputStream(); workbook.write(outputStream); //输出文件到客户端 outputStream.flush(); outputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } DB.close(ps); DB.close(conn); } /** * 创建表格表头 * * @param tags * @param sheet */ private static void createTag(String[] tags, HSSFSheet sheet) { HSSFRow row = sheet.createRow(0); HSSFCell cell = null; // 定义单元格为字符串类型 for (int i = 0; i < tags.length; i++) { cell = row.createCell(i); cell.setCellValue(tags[i]); cell.setCellType(HSSFCell.ENCODING_UTF_16);// 中文处理 } } /** * 设置表格内容 * * @param res * @param sheet */ private static void createValue(java.sql.ResultSet res, HSSFSheet sheet) { try { int flag = 1; int count = res.getMetaData().getColumnCount(); HSSFRow row = null; HSSFCell cell = null; while (res.next()) { row = sheet.createRow(flag); for (int i = 1; i <= count; i++) { cell = row.createCell(i - 1); Object obj = res.getObject(i); cell.setCellValue(obj + ""); } flag++; } } catch (SQLException e) { e.printStackTrace(); } } }
DB的封装:
package com.otdrmsys.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DB { public static Connection createConn() { Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/wenling_map_db", "root", "123456"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } public static PreparedStatement prepare(Connection conn, String sql) { PreparedStatement ps = null; try { ps = conn.prepareStatement(sql); } catch (SQLException e) { e.printStackTrace(); } return ps; } public static void close(Connection conn) { try { conn.close(); conn = null; } catch (SQLException e) { e.printStackTrace(); } } public static void close(Statement stmt) { try { stmt.close(); stmt = null; } catch (SQLException e) { e.printStackTrace(); } } public static void close(ResultSet rs) { try { rs.close(); rs = null; } catch (SQLException e) { e.printStackTrace(); } } }
Action中对导出功能函数的调用:
/* * 备份数据 */ public void backup() { String fileName = "光纤段";// 文件名,不带路径,不带.xls后缀 String[] columnItems = { "光纤段id", "光纤段名称", "起点", "终点", "负责人","负责人手机号" }; String sql = "select id, name,( " + "select name from _station s where s.id = f.startPoint_id ),( " + "select name from _station s where s.id=f.endPoint_id ),( " + "select name from _repairer r where r.id=f.repairer_id ), ( " + "select phoneNum from _repairer r where r.id=f.repairer_id ) " + "from _fiberline f;"; ExportExcel.exportExcel(fileName, columnItems, sql); }
Extjs代码中的调用语句:
{ id: 'fiberLineBackupBtnId', text: '导出', hidden: true, tooltip: '备份光纤段信息', iconCls: 'save', handler: function(){ /**使用servlet方式**/ // var fileName = "光纤段";// 文件名,不带路径,不带.xls后缀 // var columnItemsStr = "光纤段id,光纤段名称,起点,终点,负责人,负责人手机号"; // var sql = "select id, name,( " // + "select name from _station s where s.id = f.startPoint_id ),( " // + "select name from _station s where s.id = f.endPoint_id ),( " // + "select name from _repairer r where r.id = f.repairer_id ), ( " // + "select phoneNum from _repairer r where r.id = f.repairer_id ) " // + "from _fiberline f;"; // var url = 'ExportExcel' + '?fileName=' + encodeURI(encodeURI(fileName)) + '&columnItemsStr=' + encodeURI(encodeURI(columnItemsStr)) +'&sql=' + sql; // window.location.href = url ; /**使用Action方式**/ window.location.href = 'fiberLine_backup.action' ; } }实现效果与上一篇博客完全一样。
相关文章推荐
- java、Extjs导出数据库里的数据至Excel并下载至本地进行数据备份方法之一——使用servlet
- Java实现数据库数据导出到Excel中并下载到浏览器本地
- java中使用JXL对Excel文件进行数据的写入、导出操作
- JSP实现从数据库导出数据到Excel下载的方法
- java中使用JXL对Excel文件进行数据的写入、导出操作
- 在vnpy中使用mongdb数据库插入tb导出的csv数据进行回测的方法
- PHP使用外部命令导出数据库,备份到服务器并下载到本地
- Java 使用poi把数据库中数据导入Excel的解决方法
- PHP使用外部命令导出数据库,备份到服务器并下载到本地
- Java 让excel导出大量数据进行分表打成压缩包进行下载
- Java使用POI将数据导出到Excel的工具方法
- JAVA使用poi进行EXCEL模板导入导出,XSSFCell数据类型
- Java导出页面数据或数据库数据至Excel文件并下载,采用JXL技术,小demo(servlet实现)
- java导出数据库中Excel表格数据的方法
- JSP实现从数据库导出数据到Excel下载的方法
- SQL:使用备份向导、SQL命令、导出数据三种方式对已建立的数据库进行备份
- java实现数据库数据导出到Excel并下载查看
- 使用Transact-SQL进行数据导入导出方法详解
- Oracle 11g数据库使用pl/sql developer进行数据导入与导出
- (转载)datagrid数据导出到excel文件给客户端下载的几种方法