2017-03-03 65 views
2

我試圖做到以下幾點:的executeUpdate和CURDATE()

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 

誰能解釋是什麼原因造成的錯誤。

+1

請參數化您的查詢! – waka

回答

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

你有一個錯誤的單引號'(你有逗號之後,但之前需要)

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

但你應該使用參數化查詢,避免字符串連接

1

'在錯誤的地方CURDATE附近( ),你可以試試這個

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

首先,試着改變你的sta準備聲明,否則你不會受到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);