Java 关于重复键语法错误
我正在创建一个在线投票系统,所有用户的投票都存储在一个数据库中。我想避免重复。例如,假设用户X对问题A投B票。此信息将添加到数据库中。一周后,同一个用户X决定对同一个问题A投C票。因此,与其在数据库中添加另一个条目,不如用新信息更新旧条目。我尝试使用ON replicate KEY UPDATE查询,但遇到了一个非常奇怪的语法异常: java.sql.SQLSyntaxErrorException:语法错误:在第1行第53列遇到“ON” 代码:Java 关于重复键语法错误,java,sql,Java,Sql,我正在创建一个在线投票系统,所有用户的投票都存储在一个数据库中。我想避免重复。例如,假设用户X对问题A投B票。此信息将添加到数据库中。一周后,同一个用户X决定对同一个问题A投C票。因此,与其在数据库中添加另一个条目,不如用新信息更新旧条目。我尝试使用ON replicate KEY UPDATE查询,但遇到了一个非常奇怪的语法异常: java.sql.SQLSyntaxErrorException:语法错误:在第1行第53列遇到“ON” 代码: 我必须说我对SQL语句和数据库相当陌生,所以我的查
我必须说我对SQL语句和数据库相当陌生,所以我的查询可能从一开始就错了。但例外情况相当奇怪Derby没有关于重复密钥更新的
语句
您应该能够使用MERGE
文档。适当的注释:您不能在Derby中使用通用的MySQL语法。如果要使用MySQL语法,请安装MySQL驱动程序。
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();
}
}