java—如何解决jdbc preparedstatement中的mysqlsyntaxerrorexception

eoigrqb6  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(267)

这个问题在这里已经有答案了

使用准备好的语句的变量列名(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 ,但没用。有什么想法吗?
谢谢!

c0vxltue

c0vxltue1#

.. 在“comment”=“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 或者一些有意义的东西。

相关问题