如何将完整的csv文件加载到表中?

时间:2019-04-15 21:00:03

标签: java mysql load-data-infile

我正在尝试将.csv文件上传到mysql表中,但是当它剩下几千行时,它只会在Movies表中上传1001行电影

我尝试将int更改为Bigint以便为其留出更多空间,因为int最多只能提供4个字符,而在csv文件中最多可以容纳6或7个字符时,最大为7220个字符 例如:

Lines included =

6116,Spice World,4.7,123
5902,A Bridge Too Far,6.9,207
Lines not included:
190955,Blood Ties,6,171
206647,Spectre,6.3,4466
13056,Punisher: War Zone,5.6,294

LAST line loaded:
7220,The Punisher,6.1,766 (LINE 1488)
last line not loaded:
7278,Meet the Spartans,3.7,359 (LINE 1608)

我注意到它达到了一个点(7220),没有带来更高的任何东西,但包括了7220及以下的所有内容。

 statement.executeUpdate("CREATE TABLE Movies("
                    + "id BIGINT, "
                    + "title VARCHAR(100), "
                    + "vote_average VARCHAR(100), "
                    + "vote_count VARCHAR(100), "
                    + "PRIMARY KEY(id))" );

  String loadQuery = "LOAD DATA LOCAL INFILE '" + "movies.csv"
                    + "' INTO TABLE Movies FIELDS TERMINATED BY ',' ENCLOSED BY '\"'\n" +
                    "LINES TERMINATED BY '\\r\\n'\n" +
                    "IGNORE 1 LINES";
            stmt.execute(loadQuery);//executing the query

更新:记住要在MySQL中选择“无限制”,这说明了为什么select只返回1000行。

1 个答案:

答案 0 :(得分:0)

我没有运行您的代码,但是, 试试这个:

CREATE TABLE discounts(
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
expired_date DATE NOT NULL,
amount DECIMAL(10 , 2 ) NULL,
PRIMARY KEY (id)
);

以下discounts.csv文件包含第一行作为列标题和其他三行数据。

discount.csv

以下语句将数据从c:\ tmp \ discounts.csv文件导入折扣表。

LOAD DATA INFILE 'c:/tmp/discounts.csv' 
INTO TABLE discounts 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

文件的字段以逗号结尾,以“ ,”结尾的字段表示,并以“ "”括起来的双引号引起来。

csv 文件的每一行都以换行符结尾,换行符由'\n'终止的行指示。

由于文件的第一行包含列标题,因此不应将其导入表中,因此我们通过指定IGNORE 1 ROWS选项将其忽略。

现在,我们可以检查折扣表以查看数据是否已导入。

SELECT * FROM discounts;

table of discount

希望这会有所帮助。