executeUpdate& CURDATE()

时间:2017-03-03 08:50:17

标签: java mysql jdbc

我试图执行以下操作:

statement.executeUpdate("INSERT INTO PlayerList (nickname, uuid, firstjoined) VALUES ('" + nickName + "','" + uuid + ",' CURDATE() )");

但我一直在接受:

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 'CURDATE())' at line 1

任何人都可以解释导致错误的原因。

4 个答案:

答案 0 :(得分:2)

您的方式可能会导致错误语法,并且可能导致SQL Injection,因此我建议使用Prepapred Statement doc,因此您可以使用以下查询:

try (PreparedStatement ps = 
    connection.prepareStatement("INSERT INTO PlayerList (nickname, uuid, firstjoined) VALUES (?, ?, CURDATE())")) {
    ps.setString(1, nickName);
    ps.setString(2, uuid);
    int i = ps.executeUpdate();

}

您收到此错误是因为您错过了引用'" + uuid + "'

答案 1 :(得分:1)

你有一个错误的单引号'(你有逗号之后但需要之前)

statement.executeUpdate("INSERT INTO PlayerList
                       (nickname, uuid, firstjoined)
                        VALUES ('" + nickName + "','" + uuid + "', CURDATE() )");

但您应该使用参数化查询来避免字符串连接

答案 2 :(得分:1)

'在curDate()附近的错误位置,你可以尝试这个

 statement.executeUpdate("INSERT INTO PlayerList (nickname, uuid, firstjoined) VALUES ('" + nickName + "','" + uuid + "', CURDATE() )");

答案 3 :(得分:1)

首先,尝试将您的语句更改为预准备语句,否则您不会受到SQL注入的保护。其次,尝试执行该函数并查看sql数据库是否支持它。第三,为什么不使用Java函数创建日期,然后将其作为参数传递给预准备语句。

Something like: java.sql.Date date = java.sql.Date.valueOf("2017-03-03");

String insertTableSQL = "INSERT INTO DBUSER"
    + "(USER_ID, USERNAME, CREATED_BY, CREATED_DATE) VALUES"
    + "(?,?,?,?)";
preparedStatement = dbConnection.prepareStatement(insertTableSQL);
preparedStatement.setDate(4, date);