在传统行业中,很多需求在我们看来似乎是一下伪需求,但是我们很多必须要开发。
比喻EXCEL,必须要导出来,必须要和他们要求一致。
大量数据导入
根据SQL语句生成路劲的文件。
/**
* 根据sql生成zip文件 * * @param sql * @param size * @param reportName * @return * @throws Exception */ public List<String> export(String sql, Integer size, String reportName, String basePath) throws Exception { if (StringUtils.isBlank(sql)) { throw new Exception(sql + "is null"); } BossPreparedStatementCreator bossPreparedStatementCreator = new BossPreparedStatementCreator(); bossPreparedStatementCreator.setSql(sql); BossRowCallbackHandler bossRowCallbackHandler = new BossRowCallbackHandler(); bossRowCallbackHandler.setSize(size); bossRowCallbackHandler.setReportName(reportName); bossRowCallbackHandler.setBasePath(basePath); // 这里为了处理没有数据返回为空的情况 BossResultSetExtractor<ResultSetMetaData> resultSetExtractor = new BossResultSetExtractor<ResultSetMetaData>( bossRowCallbackHandler); dao.queryDate(bossPreparedStatementCreator, resultSetExtractor); List<String> fileNames = bossRowCallbackHandler.getFiles(); if (bossRowCallbackHandler.getOut() != null) { bossRowCallbackHandler.getOut().flush(); bossRowCallbackHandler.getOut().close(); } if (fileNames.isEmpty()) { BossRowCallbackHandler bossRowCallbackHandler1 = new BossRowCallbackHandler(); bossRowCallbackHandler1.setSize(size); bossRowCallbackHandler1.setReportName(reportName); bossRowCallbackHandler1.setBasePath(basePath); bossRowCallbackHandler1.setSbColumn(resultSetExtractor .getSbColumn()); bossRowCallbackHandler1.createWriter(1); if (null != bossRowCallbackHandler1.getOut()) { bossRowCallbackHandler1.getOut().flush(); bossRowCallbackHandler1.getOut().close(); } fileNames = bossRowCallbackHandler1.getFiles(); } return fileNames; }
public class BossPreparedStatementCreator implements PreparedStatementCreator { private String sql; public PreparedStatement createPreparedStatement(Connection conn) throws SQLException { /*System.out.println(conn.getMetaData().getURL()+"--"+conn.getMetaData().getUserName());*/ return conn.prepareCall(sql); /* return conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);*/ } public String getSql() { return sql; } public void setSql(String sql) { this.sql = sql; } }
public class BossRowCallbackHandler implements RowCallbackHandler { private Integer size; private OutputStream out; // 字段str private String sbColumn; // 字段列表 private List<ColumnData> columnList = new ArrayList<ColumnData>(); // 每个csv最大数量 // 报表名称 private String reportName; // 基本路径 private String basePath; // 文件列表 private List<String> files = new ArrayList<String>(); // 文件后缀 private String FileType = ".csv"; @Override public void processRow(ResultSet rs) throws SQLException { if (null == columnList || columnList.isEmpty()) { createColumnList(rs.getMetaData()); } if (null == columnList || columnList.isEmpty()) return; try { createWriter(rs.getRow()); } catch (IOException e) { throw new SQLException(e); } try { StringBuffer sbData = new StringBuffer(); String columnName=null; for (ColumnData data : columnList) { columnName = data.getColumnName(); // 字段类型 String dataType = data.getDataType(); if (null != sbData && 0 != sbData.length()) { sbData.append(","); } Object columnValue = rs.getObject(columnName) == null ? "" : rs .getObject(columnName).toString(); getValueByType(sbData,dataType, columnValue); columnValue=null; } sbData.append("\r\n"); FileUtil.writeToCsv(sbData.toString(), out); sbData=null; } catch (Exception e) { throw new SQLException(e); } /* if (rs.isLast()) { try { if (null != out) out.close(); } catch (IOException e) { throw new SQLException(e); } }*/ } /** * 得到数据 * * @param data * @return */ void getValueByType(StringBuffer sb, String dataType, Object columnValue) { // 数字不进行处理 if ("NUMBER".equalsIgnoreCase(dataType) || "BINARY_FLOAT".equalsIgnoreCase(dataType) || "BINARY_DOUBLE".equalsIgnoreCase(dataType)) { sb.append(columnValue); } else { sb.append("\"\t").append(columnValue).append("\t\""); } } /** * 得到字段名称 * * @param rsmd * @throws SQLException */ public void createColumnList(ResultSetMetaData rsmd) throws SQLException { if (rsmd != null) { StringBuffer sb = new StringBuffer(); int count = rsmd.getColumnCount(); for (int i = 1; i <= count; i++) { ColumnData columnData = new ColumnData(); String columnName = rsmd.getColumnName(i); String dataType = rsmd.getColumnTypeName(i); columnData.setColumnName(columnName); columnData.setDataType(dataType); columnList.add(columnData); if (null != sb && 0 != sb.length()) { sb.append(","); } sb.append(columnName).append("\t"); } if (null != sb && 0 != sb.length()) { sb.append("\r\n"); } this.sbColumn = sb.toString(); } } /** * 创建新的file * * @param rowNum * @throws IOException */ public void createWriter(int rowNum) throws IOException { if (rowNum % size == 1) { if (out != null) { out.flush(); out.close(); } File file = null; String fileNameNew = basePath + File.separator + reportName + "_" + (rowNum / size) + FileType; file = FileUtil.createCsvFile(fileNameNew); out = new BufferedOutputStream(new FileOutputStream(file, true), 1024 * 1024); files.add(fileNameNew); FileUtil.writeToCsv(getSbColumn(), out); } } public List<ColumnData> getColumnList() { return columnList; } public void setColumnList(List<ColumnData> columnList) { this.columnList = columnList; } public Integer getSize() { return size; } public void setSize(Integer size) { this.size = size; } public String getReportName() { return reportName; } public void setReportName(String reportName) { this.reportName = reportName; } public List<String> getFiles() { return files; } public void setFiles(List<String> files) { this.files = files; } public String getFileType() { return FileType; } public void setFileType(String fileType) { FileType = fileType; } public String getSbColumn() { return sbColumn; } public void setSbColumn(String sbColumn) { this.sbColumn = sbColumn; } public String getBasePath() { return basePath; } public void setBasePath(String basePath) { this.basePath = basePath; } public OutputStream getOut() { return out; } public void setOut(OutputStream out) { this.out = out; } }
public class BossResultSetExtractor<T> implements ResultSetExtractor { RowCallbackHandler rch; public BossResultSetExtractor(RowCallbackHandler rch) { this.rch = rch; } private String sbColumn; /* * public ResultSetMetaData extractData(ResultSet rs) throws SQLException { * * while (rs.next()) { this.rch.processRow(rs); } rsmd = rs.getMetaData(); * * return rsmd; } */ public ResultSetMetaData extractData(ResultSet rs) throws SQLException { while (rs.next()) { this.rch.processRow(rs); } ResultSetMetaData rsmd = rs.getMetaData(); StringBuffer sb = new StringBuffer(); int count = rsmd.getColumnCount(); for (int i = 1; i <= count; i++) { String columnName = rsmd.getColumnName(i); if (null != sb && 0 != sb.length()) { sb.append(","); } sb.append(columnName).append("\t"); sbColumn = sb.toString(); } return rsmd; } public String getSbColumn() { return sbColumn; } public void setSbColumn(String sbColumn) { this.sbColumn = sbColumn; } }
public interface Dao { public List<String> queryPermissionCode(String sql); /** * 查询sql,生成文件 * * @param preparedStatementCreator * @param rowCallbackHandler * @throws Exception */ void queryDate(PreparedStatementCreator preparedStatementCreator, RowCallbackHandler rowCallbackHandler) throws Exception; /** * 如果返回数据为空处理 * * @param preparedStatementCreator * @param resultSetExtractor * @return * @throws Exception */ public ResultSetMetaData queryDate( PreparedStatementCreator preparedStatementCreator, ResultSetExtractor<ResultSetMetaData> resultSetExtractor) throws Exception; }
@Repository("dao") public class DaoImpl implements Dao { @Autowired private JdbcTemplate jdbcTemplate; public List<String> queryPermissionCode(String sql) { List<String> list = jdbcTemplate.queryForList(sql, String.class); return list; } public void queryDate(PreparedStatementCreator preparedStatementCreator, RowCallbackHandler rowCallbackHandler) throws Exception { /* * System.err.println(jdbcTemplate.getDataSource().getConnection() * .getMetaData().getURL()); */ jdbcTemplate.query(preparedStatementCreator, rowCallbackHandler); } /** * 如果返回数据为空处理 * * @param preparedStatementCreator * @param resultSetExtractor * @return * @throws Exception */ public ResultSetMetaData queryDate( PreparedStatementCreator preparedStatementCreator, ResultSetExtractor<ResultSetMetaData> resultSetExtractor) throws Exception { /* * System.err.println(jdbcTemplate.getDataSource().getConnection() * .getMetaData().getURL()); */ return jdbcTemplate.query(preparedStatementCreator, resultSetExtractor); } }
相关推荐
在 Java 中,实现 Excel 导入导出可以使用多种方式,本文将介绍使用 JXL 和 POI 两个库实现 Excel 导入导出的方法。 使用 JXL 库实现 Excel 导入导出 JXL(Java Excel API)是一个开源的 Java 库,用于读写 Excel ...
在Java编程环境中,实现Excel数据的导入是一项常见的任务,尤其在数据处理、报表生成或数据分析等领域。Apache POI是一个流行的库,它允许开发者读写Microsoft Office格式的文件,包括Excel(.xls和.xlsx)。本篇...
Java实现Excel导入导出是Java开发中常见的任务,主要用于数据的批量处理和分析,尤其在数据分析、报表生成和数据备份等方面具有广泛应用。要熟练掌握这一技术,开发者需要了解Excel文件的结构,熟悉Java的文件操作,...
这里我们将深入探讨如何使用Java来实现Excel的导出功能。 首先,我们需要了解Java中用于处理Excel的主要库,Apache POI是一个非常流行的选择。Apache POI是一个开源项目,它提供了API来读写Microsoft Office格式的...
要使用 Java POI 实现 Excel 导出,需要首先创建一个 HSSFWorkbook 或 XSSFWorkbook 对象,然后使用该对象创建一个工作表。下面是一个简单的示例: ```java import org.apache.poi.hssf.usermodel.HSSFWorkbook; ...
总结起来,Java实现Excel中插入图片的核心步骤包括:导入Apache POI库,创建并操作工作簿和工作表,读取和创建图片对象,创建绘图工作表,设置图片位置,最后保存工作簿。在实际开发中,可能还需要处理图片格式转换...
本篇文章将深入探讨如何使用Java实现这两个功能,主要涉及的技术栈包括Apache POI库用于操作Excel,以及JDBC(Java Database Connectivity)用于与MySQL数据库进行交互。 首先,我们需要了解Apache POI库。这是一个...
在压缩包文件"excelToCsv"中,通常会包含一个示例Java程序,该程序实现了上述步骤,你可以参考它来理解和实践这个过程。通过这个程序,你可以将任意的Excel文件转换为CSV格式,方便后续的数据处理和分析。
本文将详细介绍如何使用Java实现Excel文档数据的导入到数据库以及从数据库导出到Excel。 一、导入Excel数据到数据库 1. **库的选择**: 为了在Java中处理Excel文件,我们需要依赖第三方库,如Apache POI。Apache ...
在Java编程中,将Excel数据导入到MySQL数据库是一项常见的任务,尤其在数据处理和分析的场景下。要完成这个过程,我们需要使用特定的库来读取Excel文件,并使用JDBC(Java Database Connectivity)来与MySQL数据库...
本主题主要探讨如何利用Java技术实现这一功能。HTML作为一种网页标记语言,可以方便地展示复杂的数据结构,而Excel则提供了良好的表格展示和数据分析能力。通过Java,我们可以将HTML内容解析并转换为Excel格式,以便...
本文将深入探讨如何使用Java和jxl库来实现这一功能,让开发者能够创建任意复杂格式的Excel文件,并允许用户在客户端保存或在线打开。 首先,我们要了解jxl库。jxl是Java Excel API的缩写,它是一个开源的Java库,...
首先,Java实现Excel导入功能通常涉及解析Excel文件,这主要依赖于Apache POI库。Apache POI是一个开源项目,提供了API来处理Microsoft Office格式的文件,包括Excel(.xls和.xlsx)。使用POI,你可以创建工作簿...
jxl是一个流行且强大的Java库,能够读写Microsoft Excel文件。这里我们将介绍如何利用jxl库从数据库(如MySQL)中获取数据并将其导出到Excel。 首先,你需要在项目中添加jxl库和JDBC驱动,例如用于MySQL的`mysql-...
标题:Java实现Excel导出功能 描述:本文将详细介绍如何使用Java进行Excel文件的创建与导出,特别针对初学者,提供易于理解的代码示例和详细的解释。 ### Java实现Excel知识点详解 #### 1. 引入依赖库 在Java中...
在Java编程中,导出Excel是一项常见的任务,特别是在数据处理和报表生成的场景下。本项目利用了Apache POI库,这是一个强大的API,允许开发者创建、修改和展示Microsoft Office格式的文件,包括Excel(.xlsx和.xls)...
要实现这一功能,通常会用到Apache POI库,这是一个强大的API,允许Java程序员创建、修改和显示Microsoft Office格式的文件,包括Excel(.xlsx和.xls)。 首先,你需要在项目中引入Apache POI库。如果你使用Maven,...
以上就是Java实现Excel导入导出的基本流程和关键知识点。实际项目中,可能还需要考虑线程安全、并发处理、数据验证、公式计算等复杂情况。通过熟练掌握这些技术,可以高效地在Java应用中处理Excel数据。
总的来说,Java配合`jxl`库可以方便地实现Excel文件的创建和数据写入,这对于数据导出、报告生成等场景非常实用。然而,需要注意的是,`jxl`库只支持旧版的.BIFF8格式(Excel 97-2003),对于新版的.xlsx格式(Excel...
以上就是使用Java实现Excel数据导入数据库的主要步骤和关键知识点。通过熟练掌握这些技术,你将能够构建出高效且可靠的Excel到数据库导入系统。在实际应用中,还可能需要根据具体需求进行调整和定制,如错误处理、...