Java利用利用MYSQL LOAD DATA LOCAL INFILE实现大批量导实现大批量导
入数据到入数据到MySQL
Mysql load data的使用,MySQL的LOAD DATAINFILE语句用于高速地从一个文本文件中读取行,并装入一个
表中
Mysql load data的使用的使用
数据库中,最常见的写入数据方式是通过SQL INSERT来写入,另外就是通过备份文件恢复数据库,这种备份文件在MySQL
中是SQL脚本,实际上执行的还是在批量INSERT语句。
在实际中,常常会遇到两类问题:一类是数据导入,比如从word、excel表格或者txt文档导入数据(这些数据一般来自于非技
术人员通过OFFICE工具录入的文档);一类数据交换,比如从MySQL、Oracle、DB2数据库之间的数据交换。
这其中就面临一个问题:数据库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 CHARSET = utf8
Java代码如下:
package com.seven.dbTools.DBTools;
import org.apache.log4j.Logger;
import org.springframework.jdbc.core.JdbcTemplate;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.sql.DataSource;
/**
*
@author seven
*
@since 07.03.2013
*/
public class BulkLoadData2MySQL {
private static final Logger logger = Logger.getLogger(BulkLoadData2MySQL.class);
private JdbcTemplate jdbcTemplate;
评论0