JDBC批处理读取指定Excel中数据到Mysql关系型数据库

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
简介:

这个demo是有一个Excel中的数据,我需要读取其中的数据然后导入到关系型数据库中,但是为了向数据库中插入更多的数据,循环N次Excel中的结果.

关于JDBC的批处理还可以参考我总结的如下博文:

http://www.cnblogs.com/DreamDrive/p/5757693.html

此外用到了读取Excel文件的jxl.jar包

下载地址:http://files.cnblogs.com/files/DreamDrive/jxl.rar

附代码:

复制代码
  1 import java.io.FileInputStream;
  2 import java.io.IOException;
  3 import java.io.InputStream;
  4 import java.sql.Connection;
  5 import java.sql.DriverManager;
  6 import java.sql.PreparedStatement;
  7 import java.sql.SQLException;
  8 import java.sql.Statement;
  9 import java.util.ArrayList;
 10 import java.util.List;
 11 
 12 import jxl.Cell;
 13 import jxl.Workbook;
 14 
 15 /**
 16  * Excel模板中的数据分析导入到Mysql中.
 17  * @author CDV-DX7
 18  *
 19  */
 20 public class ExcelToMysql {
 21     public static void main(String[] args) {
 22         String excelUrl = "C:\\Users\\CDV-DX7\\Desktop\\节目信息输入数据.xls";
 23         excel2db(excelUrl);
 24     }
 25 
 26     public static void excel2db(String importPath) {
 27         List<Cell[]> rowList;
 28         rowList = jxlGetExcelRows(importPath);
 29         try {
 30             long start = System.currentTimeMillis();
 31             Class.forName("com.mysql.jdbc.Driver");
 32             Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/50million?rewriteBatchedStatements=true","root","root");
 33             connection.setAutoCommit(false);
 34             PreparedStatement cmd = connection.prepareStatement("insert into asset (assetname,director,screenwriter,actor,programtype,region,language,releasetime,duration,alias) "
 35                     + "values(?,?,?,?,?,?,?,?,?,?)");
 36             
 37             String assetname = null;
 38             String director = null;
 39             String screenwriter = null;
 40             String actor = null;
 41             String programtype = null;
 42             String region = null;
 43             String language = null;
 44             String releasetime = null;
 45             String duration = null;
 46             String alias = null;
 47             int totalCount = 0;
 48             for (int k=1;k<442478;k++){
 49                 //50万对应.........................redis是0号数据库
 50                 //100万对应循环次数8851---用时65680---redis是1号数据库
 51                 //500万对应循环次数44248---用时469947---redis是2号数据库
 52                 //1000万对应循环次数88496---用时1385016---redis是3号数据库
 53                 //5000万对应循环次数442478---用时C盘空间不够了....暂时不做数据了..
 54                 for (int m=1; m<rowList.size(); m++) {
 55                     Cell[] cells = rowList.get(m);
 56                     for(int i=0; i<cells.length-1; i++){
 57                         totalCount++;
 58                         String contents = cells[i].getContents(); 
 59                         switch(i){
 60                             case 0:
 61                                 assetname = contents;
 62                                 break;
 63                             case 1:
 64                                 director = contents;
 65                                 break;
 66                             case 2:
 67                                 screenwriter = contents;
 68                                 break;
 69                             case 3:
 70                                 actor = contents;
 71                                 break;
 72                             case 4:
 73                                 programtype = contents;
 74                                 break;
 75                             case 5:
 76                                 region = contents;
 77                                 break;
 78                             case 6:
 79                                 language = contents;
 80                                 break;
 81                             case 7:
 82                                 releasetime = contents;
 83                                 break;
 84                             case 8:
 85                                 duration = contents;
 86                                 break;
 87                             case 9:
 88                                 alias = contents;
 89                                 break;
 90 
 91                         }
 92                     }
 93                     cmd.setString(1,assetname);
 94                     cmd.setString(2,director);
 95                     cmd.setString(3,screenwriter);
 96                     cmd.setString(4,actor);
 97                     cmd.setString(5,programtype);
 98                     cmd.setString(6,region);
 99                     cmd.setString(7,language);
100                     cmd.setString(8,releasetime);
101                     cmd.setString(9,duration);
102                     cmd.setString(10,alias);
103                     
104                     cmd.addBatch();
105                     if(totalCount%10000==0){
106                         cmd.executeBatch();
107                     }
108                 }
109             }
110             cmd.executeBatch();
111             connection.commit();
112             long end = System.currentTimeMillis();//
113             System.out.println("批量插入需要时间:"+(end - start));
114             cmd.close();
115             connection.close();
116         } catch (Exception e) {
117             e.printStackTrace();
118         } 
119     }
120     
121     /**
122      * 得到指定Excel文件中(可以再指定标签)中的行....
123      * @param filename
124      * @return
125      */
126     private static List<Cell[]> jxlGetExcelRows(String filename) {
127         InputStream is = null;
128         jxl.Workbook rwb = null;
129         List<Cell[]> list = new ArrayList<Cell[]>();
130         try {
131             is = new FileInputStream(filename);
132             rwb = Workbook.getWorkbook(is);
133             // Sheet[] sheets = rwb.getSheets();
134             // int sheetLen = sheets.length;
135             jxl.Sheet rs = rwb.getSheet(0); // 默认先读取第一个工作表的数据
136             
137             //getRows() 获取总共多少行...getRow(n)获取第n行...
138             for(int i=0; i<rs.getRows(); i++ ){
139                 list.add(rs.getRow(i));
140             }
141         } catch (Exception ex) {
142             ex.printStackTrace();
143         } finally {
144             rwb.close();
145             try {
146                 is.close();
147             } catch (IOException e) {
148                 e.printStackTrace();
149             }
150         }
151         return list;
152     }
153 }
复制代码

 

 


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/5826997.html,如需转载请自行联系原作者

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
300 1
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
MySQL功能模块探秘:数据库世界的奇妙之旅
]带你轻松愉快地探索MySQL 8.4.5的核心功能模块,从SQL引擎到存储引擎,从复制机制到插件系统,让你在欢声笑语中掌握数据库的精髓!
56 26
Go语言数据库编程:使用 `database/sql` 与 MySQL/PostgreSQL
Go语言通过`database/sql`标准库提供统一数据库操作接口,支持MySQL、PostgreSQL等多种数据库。本文介绍了驱动安装、连接数据库、基本增删改查操作、预处理语句、事务处理及错误管理等内容,涵盖实际开发中常用的技巧与注意事项,适合快速掌握Go语言数据库编程基础。
122 62
数据存储使用文件还是数据库,哪个更合适?
数据库和文件系统各有优劣:数据库读写性能较低、结构 rigid,但具备计算能力和数据一致性保障;文件系统灵活易管理、读写高效,但缺乏计算能力且无法保证一致性。针对仅需高效存储与灵活管理的场景,文件系统更优,但其计算短板可通过开源工具 SPL(Structured Process Language)弥补。SPL 提供独立计算语法及高性能文件格式(如集文件、组表),支持复杂计算与多源混合查询,甚至可替代数据仓库。此外,SPL 易集成、支持热切换,大幅提升开发运维效率,是后数据库时代文件存储的理想补充方案。
【赵渝强老师】OceanBase数据库从零开始:MySQL模式
《OceanBase数据库从零开始:MySQL模式》是一门包含11章的课程,涵盖OceanBase分布式数据库的核心内容。从体系架构、安装部署到租户管理、用户安全,再到数据库对象操作、事务与锁机制,以及应用程序开发、备份恢复、数据迁移等方面进行详细讲解。此外,还涉及连接路由管理和监控诊断等高级主题,帮助学员全面掌握OceanBase数据库的使用与管理。
187 5
MySQL与Clickhouse数据库:探讨日期和时间的加法运算。
这一次的冒险就到这儿,期待你的再次加入,我们一起在数据库的世界中找寻下一个宝藏。
100 9
MySQL下载安装全攻略!小白也能轻松上手,从此数据库不再难搞!
这是一份详细的MySQL安装与配置教程,适合初学者快速上手。内容涵盖从下载到安装的每一步操作,包括选择版本、设置路径、配置端口及密码等。同时提供基础操作指南,如数据库管理、数据表增删改查、用户权限设置等。还介绍了备份恢复、图形化工具使用和性能优化技巧,帮助用户全面掌握MySQL的使用方法。附带常见问题解决方法,保姆级教学让你无忧入门!
MySQL下载安装全攻略!小白也能轻松上手,从此数据库不再难搞!
大数据新视界 --面向数据分析师的大数据大厂之 MySQL 基础秘籍:轻松创建数据库与表,踏入大数据殿堂
本文详细介绍了在 MySQL 中创建数据库和表的方法。包括安装 MySQL、用命令行和图形化工具创建数据库、选择数据库、创建表(含数据类型介绍与选择建议、案例分析、最佳实践与注意事项)以及查看数据库和表的内容。文章专业、严谨且具可操作性,对数据管理有实际帮助。
大数据新视界 --面向数据分析师的大数据大厂之 MySQL 基础秘籍:轻松创建数据库与表,踏入大数据殿堂
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问