我试图插入一些播放器数据(如果它已经存在但是我的声明每次都会创建一个新行)。这是我写的方法:
public void insertPlayerData(PlayerJoinEvent event) {
Player player = event.getPlayer();
UUID uuid = player.getUniqueId();
String ign = player.getDisplayName();
String profile = "1";
try {
//Connect To Database
Connection con = getConnection();
//Prepare Query Statement
PreparedStatement posted = con.prepareStatement(
"INSERT INTO players (uuid, ign, profile)"
+ "VALUES ('"+uuid+"', '"+ign+"', '"+profile+"')"
+ "ON DUPLICATE KEY UPDATE profile = '"+profile+"'");
//Execute Statement
posted.executeUpdate();
} catch (Exception e) {
System.out.println(lb + "Error: " +e);
} finally {
System.out.println(lb + "Player Data Inserted");
}
}
不幸的是我的声明正在创建重复的行。我尝试了许多不同的方法但是做得很短。有任何想法吗?提前谢谢。
答案 0 :(得分:1)
您的查询在重复密钥更新配置文件=配置文件中显示,这意味着您需要在创建表时将配置文件作为唯一键约束。
答案 1 :(得分:0)
1)在列上创建唯一的UNIQUE键(似乎你想要唯一的"配置文件)
2)使用:INSERT IGNORE INTO表.... 它将尝试插入行,但如果UNIQUE键发现冲突 - 它只是忽略行并尝试下一个(如果它的质量插入或只是结束查询)没有任何错误。 此查询的结果为您提供了数字成功插入的行。
如果你真的不需要更新行已经存在,那么在重复时忽略更快