- 浏览: 9520 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
pure2004:
谢谢这位仁兄,太有用了,就是还差个xls.core.LinkD ...
java操作excel实现从数据库导入导出(三)
上一篇文章主要针对的是java操作excel的描述,但是具体很没有真正的完善,仍然需要与数据库打交道。先简单介绍这个功能的具体实现吧,主要先从properties读取你实现配置好的数据表,根据你自己定义的规范在数据库里面建模,然后下一步从excel里面读取具体的内容存入到自己的一个容器里面,最后描述生成多个insert语句插入到数据库里面去
这个针对文件操作实现读写流
//定义读文件接口 package xls.io; import xls.core.CoreException; import xls.core.Record; import xls.core.Schema; public interface Reader { public boolean hasNext() throws CoreException; public Record next() throws CoreException; public void close() throws CoreException; public Schema getSchema(); }
//接口的实现类 package xls.io; import java.sql.Connection; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import xls.core.Cell; import xls.core.Column; import xls.core.CoreException; import xls.core.Record; import xls.core.Schema; import xls.core.Type; import xls.util.ConnUtils; import xls.util.IoUtils; public class SQLReader implements Reader { private Schema schema; private ResultSet rs; private ResultSetMetaData metadata; private int rowCount; private Record record; public SQLReader(Schema schema, ResultSet rs) { this.schema = schema; this.rs = rs; this.rowCount = 0; } public boolean hasNext() throws CoreException { try { while (rowCount < schema.getStartRow()) { System.err.println("[Skip Record] row=" + rowCount); if (!rs.next()) { return false; } ++rowCount; } if (rowCount > schema.getEndtRow()) { return false; } return rs.next(); } catch (SQLException sqlex) { throw new CoreException(sqlex); } } public Record next() throws CoreException { if (record == null) { record = new Record(schema, rowCount); } else { record.setRowIndex(rowCount); record.clearCells(); } try { if (metadata == null) { metadata = rs.getMetaData(); } int colTotal = metadata.getColumnCount(); Type srcType = null; Type dstType = null; Column column = null; Cell cellObject = null; for (int i = 1; i <= colTotal && (i <= schema.getColumnCount()); ++i) { column = schema.getColumn(i - 1); if (column.isNull()) { record.addCell(Cell.NULL_CELL); } else { srcType = column.getInType(); dstType = column.getType(); if (srcType == null) { srcType = dstType; } if (column.useDefault()) { cellObject = new Cell(schema, rowCount, i - 1, column.getDefaultValue()); } else { cellObject = new Cell(schema, rowCount, i - 1, IoUtils.readCell(rs, i, srcType, dstType)); } record.addCell(cellObject); } } } catch (SQLException sqlex) { throw new CoreException(sqlex); } ++rowCount; System.err.println("[Read]{" + record + "}"); return record; } public void close() throws CoreException { } public Schema getSchema() { return schema; } public static void main(String args[]) throws Exception { //POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(".\\conf\\in.xls")); //HSSFWorkbook hssfworkbook = new HSSFWorkbook(fs); //HSSFSheet sheet = hssfworkbook.getSheetAt(0); Schema schema = new Schema(); schema.open(); Connection conn = ConnUtils.getConnection(schema.getStoreConfig()); Statement stmt = conn.createStatement(); ResultSet rs = stmt .executeQuery("select vc_billmonth,vc_clientId,vc_clientName from study"); SQLReader reader = new SQLReader(schema, rs); while (reader.hasNext()) { reader.next(); } conn.close(); } }
package xls.io; import java.io.FileInputStream; import java.util.Iterator; 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.poi.poifs.filesystem.POIFSFileSystem; import xls.core.Cell; import xls.core.Column; import xls.core.CoreException; import xls.core.Record; import xls.core.Schema; import xls.core.Type; import xls.util.IoUtils; public class XlsReader implements Reader { private Iterator<?> rowIterator; private int rowCount; private Record record; private Schema schema; public XlsReader(Schema schema, HSSFSheet sheet) { this.schema = schema; this.rowIterator = sheet.rowIterator(); this.rowCount = 0; } public boolean hasNext() throws CoreException { while (rowCount < schema.getStartRow()) { System.err.println("[Skip Record] row=" + rowCount); if (!rowIterator.hasNext()) { return false; } rowIterator.next(); ++rowCount; } if (rowCount > schema.getEndtRow()) { return false; } return rowIterator.hasNext(); } public Record next() throws CoreException { int cellCount = 0; try { HSSFRow row = (HSSFRow) rowIterator.next(); Iterator<?> cells = row.cellIterator(); HSSFCell cell = null; if (record == null) { record = new Record(schema, rowCount); } else { record.setRowIndex(rowCount); record.clearCells(); } Cell cellObject = null; Type srcType = null; Type dstType = null; Column column = null; while (cells.hasNext() && (cellCount < schema.getColumnCount())) { cell = row.getCell((short) cellCount); cells.next(); if (cell == null) { column = schema.getColumn(cellCount); srcType = column.getInType(); dstType = column.getType(); if (srcType == null) { srcType = dstType; } if (column.useDefault()) { cellObject = new Cell(schema, rowCount, cellCount, column.getDefaultValue()); } else { cellObject = new Cell(schema, rowCount, cellCount, null); } record.addCell(cellObject); } else { column = schema.getColumn(cell.getCellNum()); if (column.isNull()) { record.addCell(Cell.NULL_CELL); } else { srcType = column.getInType(); dstType = column.getType(); if (srcType == null) { srcType = dstType; } if (column.useDefault()) { cellObject = new Cell(schema, rowCount, cellCount, column.getDefaultValue()); } else { cellObject = new Cell(schema, rowCount, cellCount, IoUtils.readCell(cell, srcType, dstType)); } record.addCell(cellObject); } } ++cellCount; } int columnCount = schema.getColumnCount(); if (cellCount < columnCount) { for (int i = cellCount; i < columnCount; ++i) { column = schema.getColumn(cellCount); srcType = column.getInType(); dstType = column.getType(); cellObject = new Cell(schema, rowCount, i, null); record.addCell(cellObject); } } ++rowCount; } catch (Exception ex) { System.err.println("[XlsReader read] { row=" + rowCount + ",column=" + cellCount + " }"); throw new CoreException(ex); } return record; } public void close() throws CoreException { } public Schema getSchema() { return (this.schema); } public static void main(String args[]) throws Exception { POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream( "D://project/excelUtil/conf_file/out.xls")); HSSFWorkbook hssfworkbook = new HSSFWorkbook(fs); HSSFSheet sheet = hssfworkbook.getSheetAt(0); Schema schema = new Schema(); schema.open(); XlsReader reader = new XlsReader(schema, sheet); while (reader.hasNext()) { System.out.println(reader.next()); } } }
//定义一个写的接口 package xls.io; import xls.core.CoreException; import xls.core.Record; import xls.core.Schema; public interface Writer { public void write(Record record) throws CoreException; public void close() throws CoreException; public Schema getSchema(); }
package xls.io; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import xls.core.Cell; import xls.core.Column; import xls.core.CoreException; import xls.core.Record; import xls.core.Schema; import xls.util.IoUtils; public class SQLWriter implements Writer { private Schema schema; private Connection conn; private PreparedStatement stmt; public SQLWriter(Schema schema, Connection conn) { this.schema = schema; this.conn = conn; } public void write(Record record) throws CoreException { try { if (stmt == null) { stmt = conn.prepareStatement(generateSQL(record)); } PreparedStatement pstmt = (PreparedStatement) stmt; setParameter(pstmt, record); pstmt.execute(); } catch (SQLException sqlex) { System.err.println("[SQLWriter write]{" + record + "}"); throw new CoreException(sqlex); } } public void close() throws CoreException { try { if (stmt != null) { PreparedStatement pstmt = (PreparedStatement) stmt; pstmt.close(); } } catch (SQLException sqlex) { throw new CoreException(sqlex); } } public Schema getSchema() { return schema; } private String generateSQL(Record record) { int colTotal = schema.getColumnCount(); StringBuffer columns = new StringBuffer(); StringBuffer values = new StringBuffer(); Column column = null; String colName = null; for (int i = 0; i < colTotal; ++i) { column = schema.getColumn(i); if (!column.isNull()) { colName = column.getName(); columns.append(colName + ","); values.append("?,"); } } String col = columns.toString(); String val = values.toString(); int chopIndex = col.lastIndexOf(","); if (chopIndex > 0) { col = col.substring(0, chopIndex); } chopIndex = val.lastIndexOf(","); if (chopIndex > 0) { val = val.substring(0, chopIndex); } return "insert into " + schema.getTableName() + "(" + col + ") values(" + val + ")"; } private void setParameter(PreparedStatement pstmt, Record record) throws SQLException, CoreException { int cellSize = record.getCellCount(); int paramIndex = 1; for (int i = 0; i < cellSize; ++i) { Cell cell = record.getCell(i); if (!cell.isNull()) { IoUtils.writeCell(pstmt, cell, paramIndex); ++paramIndex; } } } public static void main(String args[]){ } }
package xls.io; import java.io.OutputStream; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import xls.core.Cell; import xls.core.Column; import xls.core.CoreException; import xls.core.Record; import xls.core.Schema; import xls.util.IoUtils; public class XlsWriter { private Schema schema; private OutputStream fout; HSSFWorkbook workBook; HSSFSheet sheet; int rowCount; public XlsWriter(Schema schema_, OutputStream fout_) { this.schema = schema_; this.fout = fout_; this.workBook = new HSSFWorkbook(); this.sheet = workBook.createSheet(); this.rowCount = 0; } public void write(Record record) throws CoreException { HSSFRow row = sheet.createRow(rowCount); int sizeCell = record.getCellCount(); Cell cellObject = null; int cellIndex = 0; for (int i = 0; i < sizeCell; ++i) { cellObject = record.getCell(i); if (!cellObject.isNull()) { IoUtils.writeCell(workBook, row, cellIndex, cellObject); ++cellIndex; } } ++rowCount; System.err.println("[Write]{" + record + "}"); } public void close() throws CoreException { try { workBook.write(fout); } catch (Exception ex) { throw new CoreException(ex); } } public void writeTitle() throws CoreException { HSSFRow row = sheet.createRow(rowCount); int sizeColumn = schema.getColumnCount(); Column column = null; int titleIndex = 0; for (int i = 0; i < sizeColumn; ++i) { column = schema.getColumn(i); if (!column.isNull()) { IoUtils.writeTitle(row, titleIndex, column.getName()); ++titleIndex; } } ++rowCount; } public Schema getSchema() { return schema; } }
这个针对文件操作实现读写流
相关推荐
总结,Java通过Apache POI库处理Excel文档,结合JDBC进行数据库操作,实现了数据的导入导出。在实际应用中,可能还需要处理异常、优化性能,以及考虑并发和多线程等问题。理解并掌握这些技术,可以极大地提高Java...
在这个主题中,我们将深入探讨如何使用Java技术栈,特别是基于IDEA开发环境,来实现在JSP和Servlet中进行Excel与数据库之间的数据导入和导出。 首先,我们需要了解Java中用于处理Excel文件的库,如Apache POI。...
Java实现Excel导入导出数据库的方法示例主要介绍了Java实现Excel导入导出数据库的方法,结合实例形式分析了java针对Excel的读写及数据库操作相关实现技巧。该示例中,主要讲解了如何将Excel文件导入到数据库中,并...
在Java开发中,有时我们需要将数据库中的数据导出到Excel文件,或者从Excel文件导入数据到数据库。Apache POI是一个流行的API,专为处理Microsoft Office格式的文件,如Excel(.xlsx, .xls)。本教程将详细介绍如何...
这个"asp将EXCEL导入导出数据库原程序"提供了一个解决方案,能够方便地将Excel中的数据存入MSSQL数据库,同时也能将数据库中的数据导出到Excel文件。 首先,我们需要了解如何使用ASP连接MSSQL数据库。通常,这涉及...
本篇文章将深入探讨如何使用Java实现这两个功能,主要涉及的技术栈包括Apache POI库用于操作Excel,以及JDBC(Java Database Connectivity)用于与MySQL数据库进行交互。 首先,我们需要了解Apache POI库。这是一个...
用Java实现的Excel的导入导出,简洁明了,高质量代码。
本文将详细讲解如何使用Java实现从MySQL数据库的表导出到Excel文件的过程,以及涉及到的关键技术和工具。 首先,我们需要了解的是Java与数据库交互的基础——JDBC(Java Database Connectivity)。JDBC是Java API,...
2、java读取数据库数据,并导出为excel文件。 3、README.md中有详细的操作步骤示例。 使用说明: 1. 先使用postman导入:other/excel相关.postman_collection.json 2. 导入sql到数据库:other/excel.sql 3. idea导入...
在本项目中,"spring boot+mybatis plus+easy poi实现数据库导出成excel和excel导入到数据库",开发者利用了Spring Boot、MyBatis Plus和EasyPoi库来实现了一个功能强大的数据交互系统,允许用户将数据库中的数据...
总的来说,这个项目展示了如何在Java环境中,结合Spring Boot的便利性,利用MyBatis进行数据库操作,借助Apache POI处理Excel文件,以及Thymeleaf生成动态页面,实现数据的导入导出功能。这是一个综合性的Java Web...
在"Java操作Excel之Poi模板导入导出"这个主题中,我们将深入探讨如何使用POI库来处理Excel模板,并进行数据的导入和导出。 首先,了解Excel模板的基本概念。模板通常包含预定义的样式、格式和计算,开发人员可以...
总之,这个项目是一个完整的Java解决方案,用于处理Excel文件的导入导出,同时具备用户友好的进度条显示。它利用了Apache POI的强大功能,结合maven的依赖管理,以及可能的GUI组件,提供了高效且直观的数据操作体验...
总的来说,熟练掌握Excel和数据库之间的数据导入导出技巧,对于提升工作效率,进行数据分析,甚至开发数据驱动的应用程序都至关重要。在实际操作中,我们还需要考虑数据的安全性、隐私保护以及性能优化等问题,确保...
总结起来,"使用poi从数据库导出excel表的示例"是一个结合了Struts1 MVC框架和Apache POI库的Java编程任务,它涉及数据库连接、SQL查询、Excel文件生成以及Web应用响应。这个过程不仅有助于数据的高效管理和分享,也...
本主题主要关注如何使用Java将数据库中的数据导出到Excel,以及如何从Excel文件导入数据到数据库。以下是一些关键知识点的详细说明: 1. **Java与Excel的交互**:Java中处理Excel文件最常用的库是Apache POI,它...
本项目"java编写的数据库导入和导出工具"旨在简化这个过程,支持对SQL Server和MySQL数据库进行数据的便捷操作。下面我们将详细探讨相关的Java编程知识点、数据库操作以及可能涉及的库和框架。 1. **Java编程基础**...
在Spring Boot中实现Excel的导入导出可以通过POI库来实现,POI是一个开源的Java库,用于处理Microsoft Office格式文件,包括Excel。一个简单的示例,演示如何在Spring Boot项目中使用POI来实现Excel的导入导出功能。...
总结来说,这个项目涵盖了Java编程、文件操作(尤其是Excel处理)、数据库连接与操作(通过JDBC和SQL)以及数据导入导出策略等多个IT核心技能。对于学习和提升这些技能,这个项目提供了一个很好的实践平台。
综上所述,通过配置文件实现Excel的导入导出和校验是一种高效且灵活的解决方案,它可以提升开发效率,简化代码,同时确保数据的质量。在实际项目中,我们可以结合具体的编程语言和库,根据配置文件来定制化我们的...