Java中实现大批量导入数据到MySQL——LOAD DATA LOCAL INFILE

本文介绍了如何使用Java结合MySQL的LOAD DATA LOCAL INFILE语句,高效地从CSV文件导入大量数据。通过示例代码展示了一个实际的Java实现过程,强调了这种方式相比INSERT语句的性能优势,并提供了LOAD DATA INFILE的基本语法。
摘要由CSDN通过智能技术生成

Mysql load data的使用

数据库中,最常见的写入数据方式是通过SQL INSERT来写入,另外就是通过备份文件恢复数据库,这种备份文件在MySQL中是SQL脚本,实际上执行的还是在批量INSERT语句。

在实际中,常常会遇到两类问题:一类是数据导入,比如从word、excel表格或者txt文档导入数据(这些数据一般来自于非技术人员通过OFFICE工具录入的文档);一类数据交换,比如从MySQL、OracleDB2数据库之间的数据交换。

这其中就面临一个问题:数据库SQL脚本有差异,SQL交换比较麻烦。但是几乎所有的数据库都支持文本数据导入(LOAD)导出(EXPORT)功能。利用这一点,就可以解决上面所提到的数据交换和导入问题。

MySQL的LOAD DATAINFILE语句用于高速地从一个文本文件中读取行,并装入一个表中。文件名称必须为一个文字字符串。下面以MySQL5为例说明,说明如何使用MySQL的LOADDATA命令实现文本数据的导入。

注意:这里所说的文本是有一定格式的文本,比如说,文本分行,每行中用相同的符号隔开文本等等。等等,获取这样的文本方法也非常的多,比如可以把word、excel表格保存成文本,或者是一个csv文件。

在我的项目中,使用的环境是快速上传一个csv文件,原系统中是使用的db2数据库,然后调用了与mysql的loaddata相似的一个函数sysproc.db2load。但是loaddata在mysql的存储过程是不能使用的。采取的方法时在java代码中调用此方法。

实现的例子:

准备测试表

SQL如下:

use test;
CREATE TABLE `test` (
   `id` int ( 10 ) unsigned NOT NULL AUTO_INCREMENT,
   `a` int ( 11 ) NOT NULL,
   `b` bigint( 20 ) unsigned NOT NULL,
   `c` bigint( 20 ) unsigned NOT NULL,
   `d` int ( 10 ) unsigned NOT NULL,
   `e` int ( 10 ) unsigned NOT NULL,
   `f` int ( 10 ) unsigned NOT NULL,
   PRIMARY KEY (`id`),
   KEY `a_b` (`a`,`b`)
) ENGINE=InnoDB AUTO_INCREMENT= 1 DEFAULT CHARSET=utf8

?

Java代码如下:

package com.seven.dbTools.DBTools;
 
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.springframework.jdbc.core.JdbcTemplate;
 
import javax.sql.DataSource;
 
import org.apache.log4j.Logger;
 
/**
  * @author seven
  * @since 07.03.2013
  */
public class BulkLoadData2MySQL {
 
    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值