`
zranye
  • 浏览: 26518 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Excel和Database双向读写

    博客分类:
  • JAVA
 
阅读更多

      作为新一代码农,当下最最需要的就是把前辈们的已有成果变成自己掌握的知识。引用现成组件是一个敏捷开发要求中比较常用到的方法。昨天就被要求到用jxl的jar包来完成对Excel和数据库两者之间相互地读写的功能。

      我写了一个java项目来测试这块功能。

      首先是“读”这一块,从现有的Excel表格读取数据到数据库里面,代码贴上:

public class ReadXLS {
	private static Log mLog = LogFactory.getLog(ReadXLS.class);
	public static void readProductsFromXLS(Sheet sheet) throws ClassNotFoundException, SQLException {
		Connection conn = JdbcUtil.getConn();
		java.sql.PreparedStatement stmt = null;
		stmt =  conn.prepareStatement("insert into products values" +
		"(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
		//从i = 1 开始是因为Excel表格第一行一般都是列名,所以数据时在第二行开始的。
		for (int i = 1; i < sheet.getRows(); i++) {
			for (int j = 0; j < 17; j++) {
				Cell cell = sheet.getCell(j, i);
				//这些判断是很硬性的,暂时也没有想到适应性更强的方法来对此进行判断
				if( j == 3  || j == 9 || j == 10 || j == 12 || j == 13){
					stmt.setInt(j + 1, Integer.parseInt(cell.getContents()));
				}else if(j == 7 || j == 8){
					mLog.info("J ==" + j +"单元格内容为:" + cell.getContents());
					stmt.setFloat(j + 1, Float.parseFloat(cell.getContents()));
				}else if(j == 11){
					mLog.info("J ==" + j +"单元格内容为:" + cell.getContents());
					stmt.setTimestamp(j + 1, new Timestamp((
							DateUtil.parse(DateUtil.FORMAT6, cell.getContents())).getTime()));
				}else{
					stmt.setString(j + 1, cell.getContents());
				}
			}
			//考虑到性能问题,必须使用批处理
			stmt.addBatch();
		}
		mLog.info("批处理执行");
		stmt.executeBatch();
		JdbcUtil.close(null, stmt, conn);
	}

}

 在“写”这一块,比较需要技巧,主要是对数组的操作。

public class CreateXLS {

	/**
	 * 	 * 
	 * 步骤:1、通过Workbook提供的静态方法createWorkbook(File file)来打开一个文件,并
	 * 		得到一个WritableWorkbook的实例book,
	 * 		2、通过实例book的createSheet(String name, int pageIndex)来创建纸张,
	 * 		3、创建一个jxl.write.Label实例,并指定lable的行、列和值。
	 * 		4、把label的实例添加到纸张sheet上。
	 * 		5、book.write();写入创建的实例和属性;
	 * 		6、关闭流book.close();
	 */
	
	public static void buildXls(WritableSheet sheet){
		ProductDao prodDao = new ProductDaoImpl();
		try {
			//通过dao里面的实现类来操作,所以在实现类里,应该返回一个ArrayList,并且是二维的数组列表
			ArrayList prods =(ArrayList) prodDao.load();
			Label label = null;
			for(int i= 0; i<prods.size();i++){
				 ArrayList inner = (ArrayList) prods.get(i);
				 for(int j=0; j < inner.size();j++){
					 label = new Label(j,i,inner.get(j).toString());
					 sheet.addCell(label);
				 }
			}
			
		} catch (RowsExceededException e) {
			e.printStackTrace();
		} catch (WriteException e) {
			e.printStackTrace();
		}
	}

}

 

值得注意的是,jxl在对于使用Workbook操作读和写时,创建的对象是不一样的,写的是用一个可写的WritableWorkbook,这种考虑,个人认为应该是出于对性能的苛刻要求,在写的book(工作簿)对象进行一系列操作完以后要进行“写”的操作,就是book.wirte()。而对读写相同的操作都是需要对Cell来进行操作,即对每一个单元格操作,所以一般都会用到遍历的方法。

 

附上一整个demo。

分享到:
评论

相关推荐

    SQL-excel-database-sql

    综上所述,"SQL-excel-database-sql"项目旨在展示如何通过VBA将Excel和SQL数据库结合起来,以应对大数据的挑战。这涉及到SQL的数据库管理,Excel的数据分析与展示,以及VBA的自动化编程,三者协同工作,实现高效的...

    ODBC方式读写EXCEL

    在本例中,我们将探讨如何使用ODBC来读取和写入Excel文件。Excel虽然不是传统意义上的数据库,但可以通过ODBC驱动程序将其视为数据源,从而实现数据的高效处理。 首先,你需要在你的系统上安装适用于Excel的ODBC...

    vc 读写Excel文件的方法

    在VC++中,读写Excel文件通常有两种方法:一种是通过ODBC(Open Database Connectivity)接口,另一种则是利用OLE(Object Linking and Embedding)技术。这两种方法各有优缺点,适用于不同的场景。 首先,我们来看...

    asp 读写 excel文件 asp读写.xls 组件+教程+组件安装+代码例子(可运行).zip

    asp 读写 excel文件 asp读写.xls 组件+教程+组件安装+代码例子(可运行) 我看网上有人把 asp操作excel 技术总结 进行出售,刚在项目中用到,就分享出来,提供给大家免费试用。Ade下载地址: ...Microsoft Access ...

    VS2019 MFC下使用ODBC读写EXCEL表格

    在Microsoft Visual Studio 2019 (VS2019) 的MFC(Microsoft Foundation Classes)环境下,通过ODBC(Open Database Connectivity)实现对Excel表格的读写是常见的数据库操作需求。ODBC是一个标准的API,它允许应用...

    VS2019 C# 读写Excel2007

    这是一个类库,可以对Excel 2007 进行读写操作. 开发环境 Visual Studio 2019. 需要安装ODTwithODAC1120320_32bit客户端组件. 可以在此...

    C++ 直接通过ODBC读写Excel表格文件

    当涉及到与数据处理相关的任务时,C++也可以通过ODBC(Open Database Connectivity)接口来实现对各种数据库的访问,包括Microsoft Excel。本篇文章将深入探讨如何利用C++直接通过ODBC读写Excel表格文件。 首先,...

    读写Excel.zip

    当我们需要在C++程序中处理Excel文件时,通常会利用Windows组件(COM)和MFC(Microsoft Foundation Classes)库来实现读写操作。"读写Excel.zip"这个压缩包可能包含了示例代码或库,便于开发者在C++环境中进行Excel...

    excel模版生成数据库表DDL工具Database_Modeling_Excel_7_0.zip

    Database_Modeling_Excel是一款能够从设计文档直接生成DDL的工具,功能比较强大,支持以下类型数据库:SQL ServerMy SQLOracleSQLite安装说明:先安装EXCEL2007或更高版本点击菜单中的选项,选择启动此内容。...

    excel2database.zip

    "excel2database"可能代表了一个项目目录或者文件夹,包含了实现这一功能的所有代码和资源。在这个目录下,你可能会找到如下的组件: 1. **主应用类**(Main Application Class):启动Spring Boot应用,配置数据库...

    java excel 读写 java excel 导入数据库

    Java Excel 读写与导入数据库是Java开发中常见的任务,特别是在数据处理和分析场景下。以下将详细讲解这个主题,并提供一些关键知识点。 首先,Java处理Excel文件主要依赖于两个库:Apache POI 和 JExcelAPI。...

    labview读写Excel和word

    在LabVIEW中,读写Excel和Word文档是常见的数据处理和报告生成任务。下面我们将详细介绍如何在LabVIEW中实现这些功能。 一、读取Excel文件 在LabVIEW中,可以使用VIs(Virtual Instruments)来读取Excel文件。通常...

    VC6.0 使用ODBC读写Excel表格文件.rar

    在本文中,我们将深入探讨如何使用Microsoft Visual C++ 6.0(简称VC6.0)结合ODBC(Open Database Connectivity)技术来读写Excel表格文件。ODBC是一种标准的数据库访问接口,允许应用程序通过一个统一的方式访问...

    C++ 读写Excel和SQLite数据

    本文将深入探讨如何使用C++进行Excel和SQLite数据库的读写操作,这是两个非常实用的技术点,特别是在数据处理和数据分析的场景中。 首先,C++读写Excel通常涉及到使用第三方库,如LibXL、Apache POI或OpenCV的...

    JAVA的Excel文件读写

    本教程将详细讲解如何使用Java进行Excel文件的读写操作,特别是与MySQL和SQL Server数据库的交互。 首先,Java中处理Excel文件主要依赖于Apache POI库。Apache POI是一个开源项目,它提供了API来读取、创建和修改...

    VC ODBC读写EXCEL源代码

    在本篇文章中,我们将深入探讨如何使用Visual C++(VC)结合Open Database Connectivity(ODBC)技术来读写Excel文件。ODBC是一种用于访问数据库的标准应用程序编程接口(API),它允许基于不同平台的应用程序通过...

    c# 数据库操作,excel操作,文本读写

    本主题聚焦于C#中的三个核心数据处理技术:数据库操作(以SQL Server为例),Excel文件操作,以及文本文件的读写。这些知识点在日常的数据处理和软件开发中至关重要。 1. **C#与SQL Server数据库操作**: - **创建...

    Excel_AccessDatabaseEngine.rar

    标题中的“Excel_AccessDatabaseEngine.rar”提示我们这个压缩包可能包含了与Excel数据处理和Access Database Engine相关的组件或工具。Access Database Engine是Microsoft提供的一种引擎,用于读取、写入和管理不同...

    VB访问Excel的三种方法(dao,adodb,excel对象)

    DAO是Microsoft Jet数据库引擎的一部分,用于访问Jet数据库和其他兼容的数据源,如Excel工作簿。在VB中使用DAO,你需要引用"Microsoft DAO 3.6 Object Library"库。以下是一个简单的例子: ```vb Dim db As DAO....

Global site tag (gtag.js) - Google Analytics