我试图执行以下操作:
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
任何人都可以解释导致错误的原因。
答案 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);