`
尚将军
  • 浏览: 34652 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Excel导入MySql数据库批量操作

阅读更多
最近在帮朋友做一个计时提醒系统,大致业务如下:
      某保险公司有一批保险业务保存在Excel里面,这些数据主要包括用户名字、手机号、车牌号、保险到期时间等。需要在保险到期时间之前(到期时间前48天)由系统提醒业务员,通知业务员给用户打电话(当然也可以通过云配语音盒实现自动拨号通知,用户没有这个需求,我没有提醒)。
      我的设计思路是先将Excel数据导入MySql数据库,然后通过sql语句查询出所有的数据,再计算当前日期与数据中的日期是否小于等于48,如果是,则在界面中打出这一条数据,否则不打。
      理想很丰满,现实很骨感。遇到问题及解决思路如下:
      【1】通过读取properties文件读取文件路径的时候老是报错,提示找不文件,config.properties文件配置如下:excelpath = "D:\\data.xls"
       解决方法:通过反复对比,发现properties文件中读取的后面字段直接就是字符串,不需要家双引号,应该改成如下配置形式:excelpath = D:\\data.xls
       【2】通过jxl.jar读取出Excel文件后,由于数据量大,采用了jdbc的批量插入,但是插入消耗的时间很长,有时候要10多分钟。
       解决方法:网上查找资料,http://my.oschina.net/u/1452675/blog/203670?fromerr=rl3JiqtV   该网页原文如下:
      
今天在做一个将excel数据导入数据库的程序时,由于数据量大,准备采用jdbc的批量插入。于是用了preparedStatement.addBatch();当加入1w条数据时,再执行插入操作,preparedStatement.executeBatch()。我原以为这样会很快,结果插入65536条数据一共花30多分钟,完全出乎我的意料。于是问了一下同事,他们在处理这种大批量数据导入的时候是如何处理的,发现他们也是用的jdbc批量插入处理,但与我不同是:他们使用了con.setAutoCommit(false);然后再preparedStatement.executeBatch()之后,再执行con.commit();于是再试,什么叫奇迹?就是刚刚导入这些数据花了半小时,而加了这两句话之后,现在只用了15秒钟就完成了。于是去查查了原因,在网上发现了如下一段说明:

    * When importing data into InnoDB, make sure that MySQL does not have autocommit mode enabled because that

      requires a log flush to disk for every insert. To disable autocommit during your import operation, surround it with

      SET autocommit and COMMIT statements:

      SET autocommit=0;
     ... SQL import statements ...
     COMMIT;

    第一次,正是因为没有setAutoCommit(false);那么对于每一条insert语句,都会产生一条log写入磁盘,所以虽然设置了批量插入,但其效果就像单条插入一样,导致插入速度十分缓慢。

    部分代码如下:

String sql = "insert into table *****";
con.setAutoCommit(false);
ps = con.prepareStatement(sql);
for(int i=1; i<65536; i++){
    ps.addBatch();
    // 1w条记录插入一次
    if (i % 10000 == 0){
         ps.executeBatch();
         con.commit();
     }
}
// 最后插入不足1w条的数据
ps.executeBatch();
con.commit();

照抄,问题解决
      【3】当数据库的记录超过2500条的时候,一次全部读取会造成内存溢出,死机,程序崩溃。
       解决方法:多线程分批次读取,每个线程每次只读200条

      可能有待于改进的地方:
      可以直接利用sql查询出48天之内的数据,而不用后续在Java中比对
分享到:
评论

相关推荐

    C#通过NPOI库操作Excel,并将Excel数据导入Mysql数据库(自动建表)

    内容概要:本资源介绍了如何从利用Npoi库操作Excel,如相关读取单元格、行,介绍了如何对单元格数据格式进行操作,并分享了如何将Datatable数据导入Mysql数据库,方便项目管理。 阅读建议:此资源以如何读取Excel...

    C# 写的Excel导入mysql数据库

    综上所述,C#实现Excel数据导入MySQL涉及到的主要技术点包括C#编程、Excel文件读取、数据库连接与操作、数据流处理以及性能优化。在实际操作中,需要根据具体需求和环境调整策略,确保程序的稳定性和效率。

    excel批量导入数据库

    然而,当需要将大量数据从Excel导入到数据库时,手动操作不仅耗时,还容易出错。本篇文章将详细讲解如何实现“Excel批量导入数据库”,以及利用小工具提高效率。 一、Excel与数据库的交互原理 Excel数据批量导入...

    python工具-excel批量导入mysql (几千万数据半小时可搞定)

    本篇文章将详细讲解如何利用Python工具实现Excel数据的批量导入到MySQL数据库,以及如何优化这一过程,使得几千万的数据能够在半小时内完成导入。 首先,我们需要了解Python中用于操作Excel的主要库——pandas。...

    完整的上传,excel 导入mysql 数据库

    综上所述,实现“完整的上传,excel导入mysql数据库”涉及到一系列技术步骤,包括使用POI处理Excel文件,SpringMVC处理文件上传请求,分批导入和性能优化,以及数据库操作和错误处理。掌握这些技能对于构建高效且...

    springboot上传excel导入到数据库完整demo(后端代码)

    可以使用SpringBoot的`@SpringBootTest`注解和JUnit进行单元测试,模拟HTTP请求,验证Excel导入功能是否按预期工作。 6. **项目结构**: - 一个标准的SpringBoot项目通常包括`src/main/java`下的`main`和`test`...

    Python-Excel一键导入MySQL数据库MySQL数据库一键读取到Excel表格

    本主题将深入探讨如何利用Python实现Excel数据一键导入MySQL数据库,以及如何从MySQL数据库中一键读取数据到Excel表格。 首先,我们需要了解Python中的两个关键库:`pandas`和`mysql-connector-python`。`pandas`是...

    将excel数据导入mysql数据库--Excel2Mysql工具

    标题中的“将excel数据导入mysql数据库--Excel2Mysql工具”揭示了本次讨论的主要内容,即如何使用特定的工具——Excel2Mysql,将Excel表格中的数据高效地导入到MySQL数据库中。这是一个常见的数据迁移需求,特别是在...

    java实现Excel数据导入到mysql数据库.zip

    本项目"java实现Excel数据导入到mysql数据库"旨在利用Java技术将Excel表格中的数据高效地导入到MySQL数据库,并且在数据库中存在相同数据时进行更新,同时也支持将数据库中的数据导出到Excel表中。这个过程涉及到多...

    Java解析excel导入MySQL数据库

    在IT行业中,将Excel文件的数据解析并导入到MySQL...以上就是“Java解析excel导入MySQL数据库”这一主题的主要技术细节。通过理解这些知识点,你可以根据自身需求定制和扩展这个功能,使其更加适应实际的工作场景。

    Excel导入到Mysql数据库源代码

    本知识点主要围绕如何将Excel中的数据高效地导入到MySQL数据库进行讨论。 首先,我们需要理解Excel数据的格式。Excel表格通常包含多行多列的数据,每一行代表一个记录,每一列代表一种属性。这些数据可以通过VBA...

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

    本篇文章将深入探讨如何使用Java实现这两个功能,主要涉及的技术栈包括Apache POI库用于操作Excel,以及JDBC(Java Database Connectivity)用于与MySQL数据库进行交互。 首先,我们需要了解Apache POI库。这是一个...

    用EXCEL批量导入数据库.rar

    很多数据库管理系统提供了图形化界面,如SQL Server的SSIS(SQL Server Integration Services)、MySQL的LOAD DATA INFILE等,可以设置数据源、目标表和映射规则,实现Excel到数据库的批量导入。 1. 使用SQL命令:...

    将excel导入到mysql数据库实例代码

    本教程将详细介绍如何通过编程将Excel数据导入到MySQL数据库中,这对于数据备份和迁移具有重要意义。 首先,我们需要准备以下工具: 1. Excel文件:包含要导入的数据。 2. MySQL服务器:安装并配置好的数据库服务。...

    C#实现excel文档中数据导入(mysql、sql)

    在C#编程环境中,我们可以利用各种库来处理Excel文件,并将其数据导入到数据库系统,如MySQL或SQL Server。本文将详细讲解如何实现这个过程,主要包括以下几个步骤和涉及的知识点: 1. **安装必要的库**: - 对于...

    Excel导入导出数据库小工具(附源码)

    值得注意的是,为了提高性能,可以考虑使用数据库提供的批量操作或数据流技术。 至于描述中提到的“空白数据实现自动填充”,这可能是指在导入时遇到空值,根据预设规则或已有数据进行填充。例如,如果某一列存在...

    Excel数据导入数据库中

    总结起来,将Excel数据导入MySQL数据库涉及到多个步骤,包括数据读取、数据库连接、结构创建、数据转换、数据导入以及错误处理。通过Delphi的编程能力和相关组件,我们可以构建一个高效且可靠的自动化工具来完成这个...

    WInform 程序 将Excel导入SQLSERVER数据库

    总结来说,使用WInform程序将Excel导入SQL Server数据库涉及多个步骤,包括设计用户界面、读取Excel、建立数据库连接、数据转换、批量插入和异常处理。这个过程需要对.NET编程、Excel操作以及SQL Server管理有深入的...

Global site tag (gtag.js) - Google Analytics