加载数据查询不适用于INSERT / REPLACE选项

时间:2018-11-21 11:17:14

标签: java mysql load-data-infile

我正在尝试将数据从CSV文件上传到mysql数据库表中,但是在加载数据查询中使用INSERT / REPLACE选项时遇到错误“ java.sql.SQLException:无效的utf8字符串:”。但是如果没有INSERT / REPLACE选项,则相同的查询可以正常工作。

查询:

Statement  stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);

String  query = "LOAD DATA  INFILE 'D:\\"+flnm+"'  REPLACE INTO TABLE prfl_hntr " 
+ "FIELDS TERMINATED by ',' LINES TERMINATED BY '\n' IGNORE 1 LINES"
+ " (candidate, phone, mailid, skill, texp, rexp, pctc,np);";
stmt.executeUpdate(query);

我已经在mysql文档-https://dev.mysql.com/doc/refman/8.0/en/load-data.html中验证了语法。

请注意,我需要在查询中使用REPLACE / IGNORE选项以消除重复的条目。

2 个答案:

答案 0 :(得分:1)

是的,问题不在于语法。问题可能出在Mysql表和CSV文件之间的字符集不同。我有一个类似的问题,并通过在查询中提及字符集来解决。请尝试下面给出的查询,该查询应该可以工作,并确保您的CSV文件包含Mysql表支持的数据。

查询:

String  query = "LOAD DATA  INFILE 'D:\\"+flnm+"'  REPLACE INTO TABLE prfl_hntr " 
+"character set latin1 "
+ "FIELDS TERMINATED by ',' LINES TERMINATED BY '\n' IGNORE 1 LINES"
+ " (candidate, phone, mailid, skill, texp, rexp, pctc,np);";
stmt.executeUpdate(query);

您还可以按照@RolandoMySQLDBA的答案回答以下问题:Trying to do LOAD DATA INFILE with REPLACE and AUTO_INCREMENT 它为我创造了奇迹。

答案 1 :(得分:0)

LOAD DATA 局部 INFILE'/home/xxxxx/conf.csv'到表配置字段以','结尾的行,以'\ n'结束的行,忽略1行;

尝试一次。