`

poi读取excel数据到数据库中

 
阅读更多
最近应朋友请求,做一个小程序读取excel数据到Mysql数据库中,项目分析如下
1,大批量数据,多个excel,几万行数据,插入数据库,其中涉及到主外键关联;
2,附带复制每条广告信息,打折信息对应的图片,视频复制到特定文件夹下,同时以全球唯一标识符重新命名,文件名插入带数据库中
3,项目所用jar包为poi-bin-3.8-beta3-20110606.tar.gz中的
4、不足之处,请各位指正,我继续完善

/**
 * 
 */
package cn.edu.zzuli;

/**
 * @author moon
 *
 */
import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
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;

public class POITest {
	private static Connection conn = null;
	private static Statement stmt = null;

	private static boolean connectDB() {

		String url = "";
		String username = "root";
		String password = "123456";

		// 加载驱动程序以连接数据库
		try {

			Class.forName("com.mysql.jdbc.Driver");
			url = "jdbc:mysql://127.0.0.1:3306/huang";

			conn = DriverManager.getConnection(url, username, password);
			stmt = conn.createStatement();
		}
		// 捕获加载驱动程序异常
		catch (ClassNotFoundException cnfex) {
			System.err.println("装载JDBC驱动程序失败。");
			cnfex.printStackTrace();
			return false;
		}
		// 捕获连接数据库异常
		catch (SQLException e) {
			System.err.println("无法连接数据库");
			e.printStackTrace();
			return false;
		}
		return true;
	}

	/**
	 * 复制图片组件
	 * 
	 * @param path 文件路径
	 * @param picdisname 文件名称
	 * @return
	 */
	public static String copyFileDis(String path, String picdisname) {

		String sj = UUID.randomUUID().toString();
		String picfileLast = picdisname.substring(picdisname.lastIndexOf("."));
		String fromFile = sj + "." + picfileLast;
		File oldpic = new File(path + "\\" + picdisname);
		if(!oldpic.exists()){
			System.out.println("复制文件失败,原文件不存在"+picdisname);
			return null;
		}
		File mepic = new File("D:\\mediaResource\\" + fromFile);
		int byteread = 0;
		InputStream in = null;
		OutputStream out = null;
		try {
			in = new FileInputStream(oldpic);
			out = new FileOutputStream(mepic);
			byte[] buffer = new byte[1024];
			while ((byteread = in.read(buffer)) != -1) {
				out.write(buffer, 0, byteread);
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("复制文件失败");
		} finally {
			if (out != null) {
				try {
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

			if (in != null) {
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return fromFile;
	}

	/**
	 * 查询出来ads表中ads_id的id最大值
	 */
	public static int findMaxAds() {

		int maxId = 0;
		String sql = "select max(ads_id) from ads";
		try {
			ResultSet rs = stmt.executeQuery(sql);
			while (rs.next()) {
				maxId = rs.getInt(1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return maxId;

	}

	/**
	 * 从广告说明读取数据到数据库中
	 * 
	 * @param path文件路径
	 * @return
	 * @throws ParseException
	 */
	public static boolean readExcelToDB(String path) throws ParseException {

		
		String picname = "logo.jpg";
		String dispath = path;
		// 复制图片,并获得uuid文件名返回给readExcelToDB
		String uuidjpg = POITest.copyFileDis(dispath, picname);

		String temp = path + "\\广告说明.xls";
		POIFSFileSystem fs = null;
		HSSFWorkbook wb = null;
		try {
			fs = new POIFSFileSystem(new FileInputStream(temp));
			wb = new HSSFWorkbook(fs);
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}

		HSSFSheet sheet = wb.getSheetAt(0); // 读取excel的sheet,0表示读取第一个、1表示第二个.....
		HSSFRow row = null;
		HSSFCell cell = null;
		int ads_type_id = 0;
		String business = "";
		String introduction = "";
		String address = "";
		String name = "";
		String contact = "";
		int rowNum, cellNum;
		int i;
		rowNum = sheet.getLastRowNum();
		for (i = 1; i <= rowNum; i++) {
			row = sheet.getRow(i);
			cell = row.getCell((short) 0);
			if(null ==cell){
				continue;
			}else{
				business = cell.getStringCellValue();
			}		
			cell = row.getCell((short) 1);
			if(null==cell){
				continue;
			}else{
				ads_type_id = (int) cell.getNumericCellValue();
			}
			
			cell = row.getCell((short) 2);
			if(null == cell){
				continue;
			}else{
				introduction = cell.getStringCellValue();
			}
			
			cell = row.getCell((short) 3);
			if(null == cell){
				continue;
			}else{
				address = cell.getStringCellValue();
			}
			
			cell = row.getCell((short) 4);
			if(null ==cell){
				continue;
			}else{
				contact = cell.getStringCellValue();
			}
			
			String sql = "insert into ads(ads_type_id, business,introduction,address,contact,image) values("
					+ ads_type_id
					+ ",'"
					+ business
					+ "','"
					+ introduction
					+ "','"
					+ address
					+ "','"
					+ contact
					+ "','"
					+ uuidjpg
					+ "')";
			try {
				stmt.executeUpdate(sql);
			} catch (SQLException e1) {
				e1.printStackTrace();
				return false;
			}
			if (POITest.discountNews(path) == true) {
				System.out.println("打折详情注入成功。");
			}
		}

		return true;
	}

	/**
	 * 读取打折信息到数据库,同时复制套餐图片、视频
	 * @param path文件路径
	 * @return
	 * @throws ParseException
	 */
	public static boolean discountNews(String path) throws ParseException {

		// 首先复制图片,并获得uuid文件名返回给discountNews
		String temp = path + "\\打折详情\\打折详情.xls";
		POIFSFileSystem fs = null;
		HSSFWorkbook wb = null;
		try {
			fs = new POIFSFileSystem(new FileInputStream(temp));
			wb = new HSSFWorkbook(fs);
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}

		HSSFSheet sheet = wb.getSheetAt(0); // 读取excel的sheet,0表示读取第一个、1表示第二个.....
		HSSFRow row = null;
		HSSFCell cell = null;
		int ads_type_id = 0;
		String label = "";
		String detail = "";
		Date begin_time;
		Date end_time;
		Timestamp begin_time_for;
		Timestamp end_time_for;
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		int rowNum, cellNum;
		int adsId = POITest.findMaxAds();
		int i;
		rowNum = sheet.getLastRowNum();
		for (i = 1; i <= rowNum; i++) {
			row = sheet.getRow(i);
			cell = row.getCell((short) 0);
                        //判断为空如何处理
			if(null == cell){
				continue;
			}else{
				
				label = cell.getStringCellValue();
			}
			String picname = label + ".png";
			String dispath = path + "\\打折详情\\";
			String videoname = label+".flv";
			String uuidjpg = POITest.copyFileDis(dispath, picname);
			String videouuidname =  POITest.copyFileDis(dispath, videoname);
			
			cell = row.getCell((short) 1);
			if(null == cell){
				continue;
			}else{
				detail = cell.getStringCellValue();
			}
			
			cell = row.getCell((short) 2);
			if (null == cell) {
				continue;
			} else {
				Double begin_time_int = cell.getNumericCellValue();
				begin_time = HSSFDateUtil.getJavaDate(begin_time_int);
				String begin_time_string = format.format(begin_time);
				begin_time_for = Timestamp.valueOf(begin_time_string);
			}

			cell = row.getCell((short) 3);
			if (null == cell) {
				continue;
			} else {
				Double end_time_int = cell.getNumericCellValue();
				end_time = HSSFDateUtil.getJavaDate(end_time_int);
				String end_time_string = format.format(begin_time);
				end_time_for = Timestamp.valueOf(end_time_string);
			}

			String sql = "insert into discount_inf(ads_Id,label, detail,print_times,click_times,icon,begin_time,end_time,video) values("+ adsId+ ",'"+ label+ "','"
					+ detail+ "',"+ 0+ ","+ 0+ ",'"+ uuidjpg+ "','"+ begin_time_for+ "','"+ end_time_for + "','"+videouuidname+"')";
			try {
				stmt.executeUpdate(sql);
			} catch (SQLException e1) {
				e1.printStackTrace();
				return false;
			}
		}

		return true;

	}

	public static void main(String[] args) throws ParseException {
		if (connectDB() == true) {
			String path = "d:\\广告模板";
			File file = new File(path);
			String[] fileList = file.list();
			for (int i = 0; i < fileList.length; i++) {
				String temp = path + "\\" + fileList[i];
				if (readExcelToDB(temp) == true)
					System.out.println("数据导入成功");
				else
					System.out.println("数据导入失败");
			}
		}

	}
}
0
2
分享到:
评论
2 楼 蓝色的墨 2012-03-31  
学习一下。
1 楼 秦时明月黑 2011-07-01  
自己顶下,小小的鼓励

相关推荐

    利用POI解析excel并存入数据库demo

    接着,我们通过预编译的 SQL 语句将数据插入到数据库中。为了提高效率,建议使用批处理操作,即一次插入多条数据。 在实际应用中,`getConnection()` 方法应包含连接 MySQL 数据库的逻辑,可能包括配置 JDBC URL、...

    使用POI解析excel文件并写入数据库

    这个项目实现的功能是读取excel文件中的数据,解析并写入数据库。 读取的excel文件位于项目目录下的 excel\0805.xlsx 使用IntelliJ IDEA开发此项目 使用MYSQL查看数据库 在MYSQL中运行项目db目录下的sql文件,创建...

    定时读取excel更新到数据库

    在IT行业中,定时读取Excel更新到数据库是一项常见的任务,特别是在数据管理、数据分析或业务自动化等领域。本场景中,我们使用的Excel版本是2003,这是一个较早的版本,但依然广泛应用于许多组织。以下将详细介绍...

    数据导入到excel和读取excel数据到数据库

    在实际工作中,数据导入和导出往往涉及到数据清洗、预处理和验证等步骤,确保数据的准确性和一致性。同时,考虑到性能和效率,可能需要采用多线程、批处理等技术,以处理大量数据。总之,理解并熟练掌握这些方法,能...

    java的poi技术读取Excel数据到MySQL

    本实例主要关注如何使用POI技术读取Excel数据并将其存储到MySQL数据库中。这个过程通常分为几个步骤:导入必要的库、创建Excel文件对象、读取数据、连接MySQL数据库以及将数据插入或更新到数据库。 首先,我们需要...

    POI读取Excel带格式数据

    本篇将详细讲解如何使用Apache POI读取Excel文件中的带格式数据。 首先,理解Apache POI的基本架构至关重要。POI提供了HSSF(Horrible Spreadsheet Format)用于处理老版本的.xls文件,而XSSF用于处理较新的.xlsx...

    poi作excel导入数据库

    标题中的“poi作excel导入数据库”指的是使用Apache POI库来读取Excel文件,并将数据存储到数据库中。Apache POI是Java平台上的一个开源项目,它提供了处理Microsoft Office格式文档的能力,包括Excel(.xls和.xlsx...

    如何操作Excel读取数据导入DB2数据库

    技术要点1:POI读取Excel POI(Poor Obfuscation Implementation)是一个Java库,用于读取和写入Microsoft Office文件格式,包括Excel、Word和PowerPoint等。POI提供了对Excel文件的读取和写入功能,可以读取Excel...

    读取excel数据插入数据库

    总结起来,通过Apache POI读取Excel数据和MyBatis插入数据库的流程如下: 1. 引入Apache POI和MyBatis相关依赖。 2. 使用POI读取Excel文件,获取数据并转换为目标对象。 3. 创建MyBatis的Mapper接口,定义插入数据的...

    java运用poi把excel导入数据库demo

    1. **读取Excel文件**:在Java程序中,我们首先需要创建一个` FileInputStream`对象来打开Excel文件。然后,根据文件格式,我们可以创建`HSSFWorkbook`或`XSSFWorkbook`对象。接下来,通过调用`getSheetAt()`方法...

    用poi将Excel数据导入数据库/java tools.jar动态类的生成

    在读取完数据后,你可以将它们整理成适合数据库插入的格式,比如List&lt;List&lt;Object&gt;&gt;,然后使用JDBC或者ORM框架(如Hibernate、MyBatis)将数据批量插入到数据库中。 接着,我们来看看动态类生成的部分。在Java中,`...

    Java用POI API实现对Excel表的读取与写入,包含对数据库的读写,亲测有效

    1、POI_EXCEL包下分别有两个类,一个是读取excel内容,一个是想excel写入内容 2、cn.itcast包下的所有包,是为了实现从excel写入到数据库中,和从数据库写入到excel中 注意事项: 1、需要导入maven工程 2、使用...

    excel表导入数据库 数据库导出excel(idea平台)

    1. 使用Apache POI读取Excel文件,遍历每一行每一列,将数据存储到Java对象中。 2. 创建JDBC连接,与数据库建立通信。这通常涉及到设置数据库URL、用户名、密码等信息。 3. 预编译SQL语句,根据Excel中的数据生成...

    poi读取excel传入数据库代码

    本示例将详细讲解如何使用Apache POI库来读取Excel数据,并将其存储到数据库中。在这个过程中,我们将涉及到日期、字符串和整型数据的转换。 首先,确保已添加Apache POI依赖到你的项目中。在Maven项目中,可以在...

    Java 使用poi导入excel 并使用xml做数据验证

    使用POI读取Excel数据的基本步骤如下: 1. 加载Excel文件:使用`WorkbookFactory.create()`方法创建一个`Workbook`实例。 2. 获取工作表:通过`Workbook`对象的`getSheetAt()`或`createSheet()`方法获取或创建工作...

    Excle读取数据转换为实体List【基于apache-poi】

    3. 使用Apache POI读取Excel:下面的代码展示了如何打开Excel文件并读取数据: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File; import ...

    java实现Excel数据导入到数据库

    1. **读取Excel文件**:使用POI的`XSSFWorkbook`(针对.xlsx文件)或`HSSFWorkbook`(针对.xls文件)类打开Excel文件,然后通过`Sheet`和`Row`对象遍历并获取数据。 2. **创建数据库连接**:使用JDBC的`...

    spring3.0 MVC Poi操作excel批量导入数据库和导出数据

    1. **查询数据库**: 根据需求,编写SQL查询语句,从数据库中提取所需数据。 2. **创建Excel工作簿**: 使用POI创建一个新的工作簿对象,并添加工作表。 3. **填充数据**: 将查询结果映射到Excel的行和列中。可以...

    java利用POI技术上传&导出Excel表格并保存数据至数据库

    通常,我们会创建一个与Excel列对应的实体类,将每个单元格的数据映射到实体类的属性上,然后使用JDBC或ORM框架(如Hibernate、MyBatis)批量插入到数据库中。记得处理可能出现的异常,如SQL注入和数据验证。 接...

    Java读取txt数据入数据库然后读出使用POI创建excel

    3. 从数据库中检索数据,可能需要使用SQL查询。 4. 使用Apache POI的XSSFWorkbook创建一个新的Excel工作簿,并将数据写入工作簿的单元格。 以上就是关于"Java读取txt数据入数据库然后读出使用POI创建excel"的知识点...

Global site tag (gtag.js) - Google Analytics