这个问题在这里已经有答案了:
使用准备好的语句的变量列名(7个答案)
两年前关门了。
我有一个查询 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
我还尝试了不强制转换为datetime的查询:
String query = "UPDATE expenses_income SET ? = ? WHERE userId = ? AND date = ?;";
但我也犯了同样的错误。然后我试着用 java.util.Date
而不是乔达 DateTime
,但没用。有什么想法吗?
谢谢!
1条答案
按热度按时间c0vxltue1#
.. 在“comment”=“123”附近使用正确的语法
由于列名参数化而导致出现异常,这是不正确的。
应该是的
我还注意到一个分号
;
在sql的末尾,应该删除它,而不需要强制转换Date
明确地。应该是公正的另外,您不应该像这样命名列名
date
,应该是last_updated
或者一些有意义的东西。