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

标签 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 选项来消除重复条目。

最佳答案

你是对的,问题不在于语法。问题可能在于 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 它对我产生了奇迹。

关于java - 加载数据查询不适用于 INSERT/REPLACE 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53410959/

相关文章:

java - 在Golang中初始化一个新类(Convert Java to Golang)

java - 如何使用 JNCryptor 加密输入流

mysql - 子选择和分组依据

php - 如何追加到 SQL 变量并在 Accordion 中显示

mysql - 使用 LOAD DATA INFILE 从 CSV 文件导入 MySQL 中的数据

mysql - 导入excel数据放入SQL数据库?

Mysql 将字符串读取为日期时间

Java对象数组错误(卡片)

java - 检查运算符更高优先级的方法,是否有更聪明的方法来做到这一点?

java - Hibernate 一对一关系表中的键问题