首页 > 解决方案 > java中sql字符串中的MYSQL语法错误

问题描述

这是一个在 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 服务器版本相对应的手册,以在第 2 行的 '' IGNORE 1 LINES (fname,lname,email,idemployee,statu,@hiredate,idsupervisor,job' 附近使用正确的语法

标签: javamysql

解决方案


您需要转义查询中的反斜杠,以便将它们从 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');";

推荐阅读