【问题标题】:MYSQL syntax errorm in sql string in javajava中的sql字符串中的MYSQL语法错误
【发布时间】:2020-01-28 00:38:36
【问题描述】:

这是一个在 mysql 命令行中完美运行的代码,但是当我尝试在 java 中执行查询时,它给出了一个语法错误,不确定是什么问题。

我已经加了空格,修改了代码,还是没找到解决办法。

String path = selectedfile.getAbsolutePath();
String sql = "LOAD DATA LOCAL INFILE '" + path + "' REPLACE INTO TABLE 
temp FIELDS TERMINATED BY ',' ENCLOSED BY '" + '"' + " LINES TERMINATED BY 
'\r\n' IGNORE 1 LINES \n" + " 
(fname,lname,email,idemployee,statu,@hiredate,idsupervisor,
jobtitle,description,country,site,clockid) "+ 
"SET hiredate = STR_TO_DATE(@hiredate, '%m/%d/%Y');";

这是java中的输出

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 '' IGNORE 1 LINES 附近使用的正确语法 (fname,lname,email,idemployee,statu,@hiredate,idsupervisor,job' 在第 2 行

【问题讨论】:

标签: java mysql


【解决方案1】:

大家好,我设法让代码运行,这里的代码可以作为未来案例的示例:

String sql = "LOAD DATA LOCAL INFILE '" + path + "' REPLACE INTO TABLE temp
\n FIELDS TERMINATED BY ',' \n ENCLOSED BY '" + '"' + "' \n LINES TERMINATED 
BY '\\r\\n' \n 
IGNORE 1 LINES \n" +
" (fname,lname,email,idemployee,statu,@hiredate,idsupervisor,
jobtitle,description,country,site,clockid) \n"+
"SET hiredate = STR_TO_DATE(@hiredate, '%m/%d/%Y');";

【讨论】:

  • 您能解释一下修复方法,这样我们就不必寻找差异了吗?
  • 我能看到的唯一区别是\n 在字符串中的位置,但这不应该有任何区别——MySQL 不区分空格和换行符作为空格。
  • @Barmar 我注意到的唯一区别是添加了一个' 来完成封闭ENCLOSED BY '"' ;最初发布的版本相当于ENCLOSED BY '"andstuff' 'IGNORE 1 ....
  • 看起来写 ENCLOSED BY '\"' 比使用那种令人困惑的串联更容易。
  • 看来 mysql java 驱动程序通过创建与 mysql 中完全相同的语句来工作。我已将 \n 添加到应添加回车的行中,并在 LINES TERMINATED BY 中添加了额外的反斜杠
【解决方案2】:

您需要对查询中的反斜杠进行转义,以便将它们从 Java 传递到 MySQL。

您还缺少ENCLOSED BY 设置周围的'。您可以转义双引号,而不是在那里连接字符串。

String sql = "LOAD DATA LOCAL INFILE '" + path + "' REPLACE INTO TABLE 
temp FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY 
'\\r\\n' IGNORE 1 LINES \n" + " 
(fname,lname,email,idemployee,statu,@hiredate,idsupervisor,
jobtitle,description,country,site,clockid) "+ 
"SET hiredate = STR_TO_DATE(@hiredate, '%m/%d/%Y');";

【讨论】:

  • 它给出了这个错误消息@Barmar:你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 '\r\n' IGNORE 1 LINES 附近使用的正确语法
  • 我不是 Java 程序员,但我认为它不允许您像这样包装字符串,因此您的代码甚至不应该首先编译。您可以发布实际代码,而不在字符串中添加换行符吗?
  • 这是我在 mysql 中使用的代码: LOAD DATA INFILE 'test.csv' REPLACE INTO TABLE temp FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (fname,lname,email,idemployee,statu,@hiredate,idsupervisor,jobtitle,description,country,site,clockid)在 MYSQL 命令行上完美运行
猜你喜欢
  • 2014-10-28
  • 1970-01-01
  • 2019-06-12
  • 2013-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-29
相关资源
最近更新 更多