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学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 本章目录 目录 ...
随机推荐
- oracle 空值与 null
Oracle中的空字符串基本上是被当成空NULL来处理的,我们可以从下面的得到印证. select nvl('','NULL') from dual 返回 'NULL' select ...
- CentOS6 下MySQL option file
my.cnf内容如下 # For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.6/e ...
- 集成Jenkins Notifier for Chrome到Jenkins CI
Jenkins也算是现在最流行的CI工具了,我们team也使用它来做持续化集成的工作.最近需要增加弹出式窗口来提醒相关人员job的状态,故选择Jenkins Notifier for Chrome这个 ...
- center os 6.5 vsftpd 登陆出现 530 错误拒绝 解决方法
别管那么多 把 /etc/vsftpd/ftpusers 里面的用户名删掉就好了.
- thinkphp 3+ 观后详解 (3)
由于上一篇太长不好编辑,于是我重开了一篇. if('common' != APP_MODE && is_file(CONF_PATH.'config_'.APP_MODE.CONF_E ...
- Setting up Nutch 2.1 with MySQL to handle UTF-8
原文地址: http://nlp.solutions.asia/?p=180 These instructions assume Ubuntu 12.04 and Java 6 or 7 instal ...
- Simple Worker Thread Class
http://www.codeproject.com/Articles/36184/Simple-Worker-Thread-Class Introduction Many times we need ...
- HRESULT 0x80131515 解决方法
http://254698001.blog.51cto.com/2521548/1339696 很多朋友在加载DLL是发生这样的错误:HRESULT: 0x80131515. 解决方法是,在DLL文件 ...
- 凯尔卡C68全球版汽车电脑诊断仪
产品简介: C68汽车故障诊断仪是凯尔卡公司新推出的一款集经济.简约.稳定.耐用于一体的汽车诊断设备, 该产品采用了最新的智能移植技术,集成度高:C68车型覆盖广,测试功能强大.数据准确等优点, 是目 ...
- 基于Andoird 4.2.2的同步框架源代码学习——同步发起端
关键组件: ContentResolver ContentService SyncManager SyncManager.ActiveSyncContext SyncManager.SyncOpera ...