【发布时间】:2015-12-12 10:05:08
【问题描述】:
几个月前我有一个 MySQL 项目,最近我又开始使用它进行开发。但是,当它执行某些语句时,它会给出错误。 SQL语句为DELETE FROM table WHERE expires < DATE_ADD(NOW(), INTERVAL ? DAYS)
现在,这曾经有效。我也知道它背后的java代码在工作,因为没有其他异常。此外,我将该语句插入 SQL 客户端,它给出了类似的错误。
java 控制台中的错误是这样的:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DAYS)' at line 1
然后是堆栈跟踪,它引导我找到在准备好的语句上调用 executeUpdate() 的代码行。
我不记得自从我之前开发以来更新或更改太多,并且运行良好。
编辑:我的 java 代码是这样的:
add(37, "DELETE FROM table WHERE expires < DATE_ADD(NOW(), INTERVAL ? DAYS)"); 函数 add() 正在对给定字符串调用 connection.prepareStatement() 并将其放入 PreparedStatements 数组中。引发异常的行是statements[37].executeUpdate();
【问题讨论】:
-
INTERVAL '?' DAYS用单引号括起来,看看它是否可以这样工作或INTERVAL '? DAYS'我不记得哪个是正确的 -
他不应该需要引号,AFAIK。您能否向我们展示您用于进行 JDBC 调用的 Java 代码。相关部分就足够了。
-
“以前可以工作”——现在不行。还有什么变化?相信 Java 控制台 - 假设您的代码是错误的并深入研究原因。如果您忘记了“工作正常”这句话,您将取得更快的进步。从 MySQL 文档开始:dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html