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

How do I insert a database row if it does not exist?

我正在尝试插入一些玩家数据(如果它不存在),但我的语句每次都会创建一个新行。这是我写的方法:

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

不幸的是,我的语句创建了重复的行。我尝试了很多不同的方法,但都失败了。有任何想法吗?提前致谢。

您的查询说重复键更新 profile = profile,这意味着您需要在创建 table 时将 profile 作为唯一键约束。

1) 在应该唯一的列上创建 UNIQUE 键(似乎您想要唯一的“配置文件”)

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

如果您真的不需要更新行,则忽略重复项更快