java - 将包含百万值的 csv 文件上传到 mysql 中的特定列

标签 java mysql database bulkinsert

数据库:MySQL

CSV 文件有大约百万条记录,如下所示:

234546,345674,464368,563236,684269,707853,...

数据应按以下方式添加到数据库中:

id|number|status| ...
-----------------------
 1|234546| ...  | ...
 2|345674| ...  | ...
 3|464368| ...  | ...
 4|563236| ...  | ...
 5|684269| ...  | ...
 6|707853| ...  | ...

当 csv 文件包含每一列的值时,我发现了一些上传 csv 文件的方法。但就我而言,我必须将值插入特定列。在 Java 中执行此操作的有效方法是什么?

最佳答案

从文件加载数据最快的方法是 LOAD DATA INFILE 。试试这个方法

LOAD DATA LOCAL INFILE '/path/to/your/file.csv'
IGNORE -- use this if you have duplicate numbers in the file and UNIQUE constraint defined on `number` column
INTO TABLE table1
FIELDS TERMINATED BY ','
LINES TERMINATED BY ','
(number)

让我们试试吧

mysql> CREATE TABLE Table1
    -> (
    ->   `id` int not null auto_increment primary key, 
    ->   `number` int, 
    ->   `status` varchar(32)
    -> );
Query OK, 0 rows affected (0.13 sec)

mysql> 
mysql> LOAD DATA LOCAL INFILE '/tmp/test.csv'
    -> INTO TABLE table1
    -> FIELDS TERMINATED BY ','
    -> LINES TERMINATED BY ','
    -> (number);
Query OK, 6 rows affected (0.00 sec)
Records: 6  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from table1;
+----+--------+--------+
| id | number | status |
+----+--------+--------+
|  1 | 234546 | NULL   |
|  2 | 345674 | NULL   |
|  3 | 464368 | NULL   |
|  4 | 563236 | NULL   |
|  5 | 684269 | NULL   |
|  6 | 707853 | NULL   |
+----+--------+--------+
6 rows in set (0.00 sec)

UPDATE: If you need to do some basic transformations or validations you can use SET clause along with user variables

LOAD DATA LOCAL INFILE '/path/to/your/file.csv'
IGNORE INTO TABLE table1
FIELDS TERMINATED BY ','
LINES TERMINATED BY ','
(@number)
SET number = CONCAT('prefix', @number)

关于java - 将包含百万值的 csv 文件上传到 mysql 中的特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20279273/

相关文章:

mysql - Joomla 网站被黑客攻击,被黑客攻击的 URL 已在数据库中

sql - MySQL 中获得最高结果的通用方法

sql - 如何修改此查询以仅获取字段值不为 0 的最后一条记录?

java - 如何给一个jtable单元格不同的背景颜色

java - hibernate native 查询映射

php - 从 Vagrant 中的 Chef Recipe 运行 PHP 脚本时 MySQL 不工作

database - RETURNING 必须包含至少一个值

sql - 向非程序员解释为什么 "Just add another column to the DB"是个坏主意

java - Linux (Ubuntu 12.04) 的多线程性能很糟糕?

java - 如何在单词之间添加分隔符?