我有一个查询会引发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
,但它没有帮助。有什么想法吗?
谢谢!
答案 0 :(得分:1)
..正确的语法使用附近'评论' =' 123'
由于列名称参数化不正确,您将收到异常。
UPDATE expenses_income SET ? = ?
应该是
UPDATE expenses_income SET column_name = ?
我还注意到SQL末尾有一个分号;
,应该删除它,你不需要明确地转换Date
。它应该只是
UPDATE expenses_income SET column_name = ? WHERE userId = ? AND date = ?
此外,您不应将列名称命名为date
,它应该是last_updated
或有意义的内容。