java小工具项目,根据sql直接导出excel
来源:互联网 发布:谢云流捏脸数据下载 编辑:程序博客网 时间:2024/06/06 02:55
线上服务器一般都禁止直接访问,所以无法用工具直接导出数据到excel。这个小工具项目为了方便导出
入口执行类:
package cn.com.bo.export;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.util.List;import java.util.Map;import org.apache.commons.dbcp.BasicDataSource;import org.kohsuke.args4j.CmdLineException;import org.kohsuke.args4j.CmdLineParser;import org.kohsuke.args4j.Option;import cn.com.bo.util.excel.ExportExcel;import cn.com.bo.util.mysql.MysqlUtil;/** * 入口执行类 * 执行命令:java -cp export-excel-0.0.1-SNAPSHOT.jar cn.com.bo.export.App * -u root * -p 123456 * -url 10.25.128.143:3306/dsp_new * -sql "select username,password from user;" * -pa export8.xls * @author ZhangShaobo * @date 2017-09-20 */public class App {/** * @param args */ public static void main( String[] args ) { AdxArg adxArg = new AdxArg(); CmdLineParser p = new CmdLineParser(adxArg);try {p.parseArgument(args);} catch (CmdLineException e) {e.printStackTrace();}exportExcel(adxArg); } public static void exportExcel(AdxArg adxArg){ BasicDataSource ds = new BasicDataSource();ds.setUsername(adxArg.username);ds.setPassword(adxArg.password);ds.setDriverClassName("com.mysql.jdbc.Driver");ds.setUrl("jdbc:mysql://"+adxArg.url+"?useUnicode=true&characterEncoding=UTF-8&useOldAliasMetadataBehavior=true"); MysqlUtil.init(ds); List<Map<String, String>> list = MysqlUtil.exeSql(adxArg.sql); FileOutputStream fileout = null;try {fileout = new FileOutputStream(new File(adxArg.path));} catch (FileNotFoundException e) {e.printStackTrace();} ExportExcel.exportExcel("qwe", list, fileout, "yyyy-MM-dd"); } }class AdxArg{@Option(name = "-u", required = true, usage = "mysql username")public String username;@Option(name = "-p", required = true, usage = "mysql password")public String password;@Option(name = "-url", required = true, usage = "mysql url, ip:port/database")public String url;@Option(name = "-sql", required = true, usage = "sql")public String sql;@Option(name = "-pa", required = true, usage = "excel path")public String path;}
/** * 这是一个通用的方法,直接传入MAP obj的list,格式化成excel,标题列取的map的key * * @param title * * @param list * List<Map<String, String>> list * @param out * 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中 * @param pattern * 如果有时间数据,设定输出格式。默认为"yyy-MM-dd" */ @SuppressWarnings({ "deprecation"})public static void exportExcel(String title, List<Map<String, String>> list, OutputStream out, String pattern) { List<String> headers = new ArrayList<>(); if (list == null || list.size() == 0) {throw new NullPointerException();}for (String m : list.get(0).keySet()) {headers.add(m);} // 声明一个工作薄 HSSFWorkbook workbook = new HSSFWorkbook(); // 生成一个表格 HSSFSheet sheet = workbook.createSheet(title); // 设置表格默认列宽度为15个字节 sheet.setDefaultColumnWidth((short) 24); // 生成一个样式 HSSFCellStyle style = workbook.createCellStyle(); // 设置这些样式 style.setBorderBottom(CellStyle.BORDER_THIN); style.setBorderLeft(CellStyle.BORDER_THIN); style.setBorderRight(CellStyle.BORDER_THIN); style.setBorderTop(CellStyle.BORDER_THIN); style.setAlignment(CellStyle.ALIGN_CENTER); // 生成一个字体 HSSFFont font = workbook.createFont(); font.setFontHeightInPoints((short) 12); font.setBoldweight(Font.BOLDWEIGHT_BOLD); // 把字体应用到当前的样式 //style.setFont(font); // 生成并设置另一个样式 HSSFCellStyle style2 = workbook.createCellStyle(); style2.setBorderBottom(CellStyle.BORDER_THIN); style2.setBorderLeft(CellStyle.BORDER_THIN); style2.setBorderRight(CellStyle.BORDER_THIN); style2.setBorderTop(CellStyle.BORDER_THIN); style2.setAlignment(CellStyle.ALIGN_CENTER); style2.setVerticalAlignment(CellStyle.VERTICAL_CENTER); // 生成另一个字体 HSSFFont font2 = workbook.createFont(); font2.setBoldweight(Font.BOLDWEIGHT_NORMAL); // 把字体应用到当前的样式 style2.setFont(font2); // 声明一个画图的顶级管理器 HSSFPatriarch patriarch = sheet.createDrawingPatriarch(); // 产生表格标题行 HSSFRow row = sheet.createRow(0); for (short i = 0; i < headers.size(); i++) { HSSFCell cell = row.createCell(i); cell.setCellStyle(style); //HSSFRichTextString text = new HSSFRichTextString(headersa[i]); cell.setCellValue(headers.get(i)); } // 遍历集合数据,产生数据行 int index = 0; for (Map<String, String> map : list) { index++; row = sheet.createRow(index); int j = 0; for (String m : map.keySet()) {HSSFCell cell = row.createCell(j); cell.setCellStyle(style2); cell.setCellValue(map.get(m)); j++;}} try { workbook.write(out); } catch (IOException e) { JOptionPane.showMessageDialog(null, "文件下载失败!"); throw new RuntimeException(); } }
查询数据库的通用方法,返回List<Map<String,String>>:
public static List<Map<String, String>> exeSql(String sql) { logger.info("sql = {"+sql+"}"); Connection conn = null; Statement stmt = null; List<Map<String, String>> result = new ArrayList<Map<String, String>>(); try { conn = getConnection(); stmt = conn.createStatement(); rs = stmt.executeQuery(sql); int columnCount = rs.getMetaData().getColumnCount(); while (rs.next()) { Map<String, String> map = new HashMap<String, String>(); for (int i = 1; i <= columnCount; i++) { map.put(rs.getMetaData().getColumnName(i), rs.getString(i)); } result.add(map); } return result; } catch (Exception e) { logger.error("execute sql " + sql + " error:"); logger.error(e.getMessage()); result = new ArrayList<Map<String, String>>(); return result; } finally { closeConn(); } }
执行命令:
* 执行命令:java -cp export-excel-0.0.1-SNAPSHOT.jar cn.com.bo.export.App * -u root * -p 123456 * -url 10.25.128.143:3306/dsp_new * -sql "select username,password from user;" * -pa export8.xls
阅读全文
0 0
- java小工具项目,根据sql直接导出excel
- 导出sql server 数据库为Excel的数据字典的小工具
- 小工具:DataGridView内容导出到Excel文件
- 自制XE2100数据导出Excel的小工具
- 场景导出小工具
- SQL转Java代码小工具
- EXCEL导入小工具
- java excel 导出,直接输出,不在项目内生成文件
- SQL小工具
- Java开发报表导入,导出小工具类
- 【小工具】CSDN博客导出工具-Java集成Maven开发
- Java小工具
- Java四舍五入小工具
- Java四舍五入小工具
- java小工具
- Java开发小工具
- java小工具CommonUtils
- <Java小工具>
- I2S与pcm的区别
- Thread类的sleep()方法和对象的wait()方法区别
- Android图片加载框架Glide用法及一些使用心得
- 使用JS实现简单的表格的增加删除全选反选以及高亮效果
- 五个简单例子,明白闭包原理
- java小工具项目,根据sql直接导出excel
- 统计比给定整数小的数的个数 -Lintcode
- BOOST 库中filesyatem 库的学习
- tomcat目录与代码自动加载的相关介绍
- Spring Boot 配置文件 – 在坑中实践
- js取<span>的值
- caffe中对于softmax layer的说明
- dedecms后台管理员密码忘记了该如何解决
- Redis 运维