JDBC批处理读取指定Excel中数据到Mysql关系型数据库
这个demo是有一个Excel中的数据,我需要读取其中的数据然后导入到关系型数据库中,但是为了向数据库中插入更多的数据,循环N次Excel中的结果.
关于JDBC的批处理还可以参考我总结的如下博文:
http://www.cnblogs.com/DreamDrive/p/5757693.html
此外用到了读取Excel文件的jxl.jar包
下载地址:http://files.cnblogs.com/files/DreamDrive/jxl.rar
附代码:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List; import jxl.Cell;
import jxl.Workbook; /**
* Excel模板中的数据分析导入到Mysql中.
* @author CDV-DX7
*
*/
public class ExcelToMysql {
public static void main(String[] args) {
String excelUrl = "C:\\Users\\CDV-DX7\\Desktop\\节目信息输入数据.xls";
excel2db(excelUrl);
} public static void excel2db(String importPath) {
List<Cell[]> rowList;
rowList = jxlGetExcelRows(importPath);
try {
long start = System.currentTimeMillis();
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/50million?rewriteBatchedStatements=true","root","root");
connection.setAutoCommit(false);
PreparedStatement cmd = connection.prepareStatement("insert into asset (assetname,director,screenwriter,actor,programtype,region,language,releasetime,duration,alias) "
+ "values(?,?,?,?,?,?,?,?,?,?)"); String assetname = null;
String director = null;
String screenwriter = null;
String actor = null;
String programtype = null;
String region = null;
String language = null;
String releasetime = null;
String duration = null;
String alias = null;
int totalCount = 0;
for (int k=1;k<442478;k++){
//50万对应.........................redis是0号数据库
//100万对应循环次数8851---用时65680---redis是1号数据库
//500万对应循环次数44248---用时469947---redis是2号数据库
//1000万对应循环次数88496---用时1385016---redis是3号数据库
//5000万对应循环次数442478---用时C盘空间不够了....暂时不做数据了..
for (int m=1; m<rowList.size(); m++) {
Cell[] cells = rowList.get(m);
for(int i=0; i<cells.length-1; i++){
totalCount++;
String contents = cells[i].getContents();
switch(i){
case 0:
assetname = contents;
break;
case 1:
director = contents;
break;
case 2:
screenwriter = contents;
break;
case 3:
actor = contents;
break;
case 4:
programtype = contents;
break;
case 5:
region = contents;
break;
case 6:
language = contents;
break;
case 7:
releasetime = contents;
break;
case 8:
duration = contents;
break;
case 9:
alias = contents;
break; }
}
cmd.setString(1,assetname);
cmd.setString(2,director);
cmd.setString(3,screenwriter);
cmd.setString(4,actor);
cmd.setString(5,programtype);
cmd.setString(6,region);
cmd.setString(7,language);
cmd.setString(8,releasetime);
cmd.setString(9,duration);
cmd.setString(10,alias); cmd.addBatch();
if(totalCount%10000==0){
cmd.executeBatch();
}
}
}
cmd.executeBatch();
connection.commit();
long end = System.currentTimeMillis();//
System.out.println("批量插入需要时间:"+(end - start));
cmd.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 得到指定Excel文件中(可以再指定标签)中的行....
* @param filename
* @return
*/
private static List<Cell[]> jxlGetExcelRows(String filename) {
InputStream is = null;
jxl.Workbook rwb = null;
List<Cell[]> list = new ArrayList<Cell[]>();
try {
is = new FileInputStream(filename);
rwb = Workbook.getWorkbook(is);
// Sheet[] sheets = rwb.getSheets();
// int sheetLen = sheets.length;
jxl.Sheet rs = rwb.getSheet(0); // 默认先读取第一个工作表的数据 //getRows() 获取总共多少行...getRow(n)获取第n行...
for(int i=0; i<rs.getRows(); i++ ){
list.add(rs.getRow(i));
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
rwb.close();
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return list;
}
}
JDBC批处理读取指定Excel中数据到Mysql关系型数据库的更多相关文章
- SpringMVC 实现POI读取Excle文件中数据导入数据库(上传)、导出数据库中数据到Excle文件中(下载)
读取Excale表返回一个集合: package com.shiliu.game.utils; import java.io.File; import java.io.FileInputStream; ...
- 将Excel中数据导入数据库(一)
在工作中经常要将Excel中数据导入数据库,这里介绍一种方法. 假如Excel中的数据如下: 数据库建表如下: 其中Id为自增字段: Excel中数据导入数据库帮助类如下: using System; ...
- Excel表数据导入Sql Server数据库中
Excel表数据导入Sql Server数据库的方法很多,这里只是介绍了其中一种: 1.首先,我们要先在test数据库中新建一个my_test表,该表具有三个字段tid int类型, tname nv ...
- 将Excel中数据导入数据库(三)
上篇文章将Excel中数据导入数据库时,将从Excel读入的数据均转换成了数据库相应字段的类型,其实这是没有必要的,因为对于数据库各种类型的插入,均可以字符串格式插入.比如表WQ_SWMSAR_A字段 ...
- 将Excel中数据导入数据库(二)
在上篇文章中介绍到将Excel中数据导入到数据库中,但上篇文章例子只出现了nvachar类型,且数据量很小.今天碰到将Excel中数据导入数据库中的Excel有6419行,其中每行均有48个字段,有i ...
- 使用sql语句比较excel中数据的不同
使用sql语句比较excel中数据的不同 我所在的项目组是一套物流系统,负责与公司的电商系统进行对接.但是公司的电商系统的省市区的配置和物流系统的省市区的配置有差异,所以需要找到这些差异. 首先找到我 ...
- 检验Excel中数据是否与数据库中数据重复
#region 记录Excel中的重复列 /// <summary> /// 记录Excel中的重复列 /// </summary> /// <param name=&q ...
- Excel中使用VBA访问Access数据库
VBA访问Access数据库 1. 通用自动化语言VBA VBA(Visual Basic For Application)是一种通用自动化语言,它可以使Excel中的常用操作自动化,还可以创建自定义 ...
- 企业运维 | MySQL关系型数据库在Docker与Kubernetes容器环境中快速搭建部署主从实践
[点击 关注「 WeiyiGeek」公众号 ] 设为「️ 星标」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 本章目录 目录 ...
随机推荐
- Windows下使用NIF扩展Erlang方法
在Erlang中,NIF(Native Implemented Function)被用来扩展erlang的某些功能,一般用来实现一些erlang很难实现的,或者一些erlang实现效率不高的功能. N ...
- sqlserver:同一数据库内负责表结构。
select * into 新表 from 旧表 where 1=2; ## where 表示要携带的数据,随便写个恒不等式就可以只复制表结构不携带数据.
- Android中全局Application的onCreate多次调用问题
String processName = OsUtils.getProcessName(this, android.os.Process.myPid()); if (processName != nu ...
- 10635 - Prince and Princess
Problem D Prince and Princess Input: Standard Input Output: Standard Output Time Limit: 3 Seconds In ...
- .NET常用类库--苏飞合集
在线网站:http://tool.sufeinet.com/CodePreview/CodeView.aspx?action=view&file=Zip/SharpZip.cs C#基类库大全 ...
- 开发过程中常用的Linux命令
做Java开发好几年了,部署JavaWeb到服务器上,一般都选择Linux,Linux作为服务器真是不二之选,高性能,只要熟悉Linux,操作快捷,效率很高. 总结一下工作中常用的Linux命令备忘: ...
- 微吧里的各种margin负值
直在做各种项目接各种需求,但你的代码能力得到提高了吗?不停的项目经历虽然能够增加你的代码行数,但不一定能提升你的代码质量,所以除了构建阶段的代码细扣,项目之后的代码总结是至关重要的. 微吧中除了模块化 ...
- C# GDI在控件上绘图
本文以以在chart控件上和窗体上画矩形为例子 不多解释了,代码很简单. 还有一些童鞋要别的源码,给我发邮箱吧 using System; using System.Collections.Gener ...
- jQuery css() 方法
$("p").css("background-color"); $("p").css("background-color" ...
- 内存管理和@property的属性
内存管理和@property的属性 目录 对内存管理的理解 Objective C内存管理方式 内存的管理 对象的所有权和内存管理原则 合理解决内存管理带来的问题 自动释放池 @property的属性 ...