【发布时间】:2018-01-14 12:37:24
【问题描述】:
我有一个查询会引发com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException,但我不知道为什么。我正在使用 xampp,当我直接尝试相同的查询时,它工作正常。我还有一大堆使用非常相似的查询的其他方法,它们都可以工作。
问题似乎与更新日期有关,我在错误消息中注意到 java 将 ' ' 放在日期周围,这使它成为一个字符串,并且可能是错误的原因。但是我不确定如何解决此问题以将日期插入日期。
代码如下:
public void update(int userId, String date, String column, String value){
try {
// convert date from String to Date
DateTime dt = DateTime.parse(date);
java.sql.Date sqlDate = new java.sql.Date(dt.getMillis());
// create prepared statement
conn = DriverManager.getConnection("jdbc:mysql://localhost/db","root", "");
String query = "UPDATE expenses_income SET ? = ? WHERE userId = ? AND date = CAST(? AS DATETIME);";
PreparedStatement preparedStmt = conn.prepareStatement(query);
preparedStmt.setString(1, column);
preparedStmt.setString(2, value);
preparedStmt.setInt(3, userId);
preparedStmt.setDate(4, sqlDate);
preparedStmt.executeUpdate();
conn.close();
} catch (Exception e) {
System.err.println("MySQL exception: " + e);
}
}
还有错误信息:
MySQL exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''comment' = '123' WHERE userId = 1 AND date = CAST('2018-01-06' AS DATETIME)' at line 1
我也尝试了不强制转换为日期时间的查询:
String query = "UPDATE expenses_income SET ? = ? WHERE userId = ? AND date = ?;";
但我得到了同样的错误。
然后我尝试使用 java.util.Date 而不是 Joda DateTime,但这没有帮助。有什么想法吗?
谢谢!
【问题讨论】:
-
列名不能作为prepared statement的参数。
-
参数只针对值,列名不是值。
标签: java mysql jdbc syntax-error prepared-statement