如果数据库行不存在,如何插入?

时间:2015-12-28 19:38:14

标签: java mysql jdbc bukkit

我试图插入一些播放器数据(如果它已经存在但是我的声明每次都会创建一个新行)。这是我写的方法:

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");
    }
}

不幸的是我的声明正在创建重复的行。我尝试了许多不同的方法但是做得很短。有任何想法吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

您的查询在重复密钥更新配置文件=配置文件中显示,这意味着您需要在创建表时将配置文件作为唯一键约束。

答案 1 :(得分:0)

1)在列上创建唯一的UNIQUE键(似乎你想要唯一的"配置文件)

2)使用:INSERT IGNORE INTO表.... 它将尝试插入行,但如果UNIQUE键发现冲突 - 它只是忽略行并尝试下一个(如果它的质量插入或只是结束查询)没有任何错误。 此查询的结果为您提供了数字成功插入的行。

如果你真的不需要更新行已经存在,那么在重复时忽略更快