我正在尝试将数据从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选项以消除重复的条目。
答案 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行;
尝试一次。