我创建了一个在线投票系统,所有用户的所有投票都存储在数据库中。我想避免重复。例如,假设用户X在问题A上投票B.此信息被添加到数据库中。然后一周后,同一用户X决定在同一问题A上投票C.因此,不应在数据库中添加另一个条目,而应使用新信息更新旧条目。我尝试使用ON DUPLICATE KEY UPDATE查询,但我得到了一个相当奇怪的语法异常:
java.sql.SQLSyntaxErrorException:语法错误:遇到" ON"第1栏第53栏。
代码:
public void castVote(int id, String username, String option) {
try {
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
connection = DriverManager
.getConnection("jdbc:derby:C:\\MyDB;create=true;upgrade=true");
String query = "INSERT INTO Votes (id, username, op) " + "VALUES (?,?,?) "
+ "ON DUPLICATE KEY UPDATE " + "id = ?, username = ?, op = ?";
preparedStatement = connection.prepareStatement(query);
preparedStatement.setInt(1, id);
preparedStatement.setString(2, username);
preparedStatement.setString(3, option);
preparedStatement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
close();
}
}
我必须说我对SQL语句和数据库是新手,所以也许我的查询错误。但例外是相当奇怪的