如果数据库行不存在,如何插入?
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 键发现冲突 - 它只是忽略行并尝试下一个(如果它的批量插入或只是结束查询)没有任何错误。
此查询的结果为您提供了 成功 插入的行。
如果您真的不需要更新行,则忽略重复项更快
我正在尝试插入一些玩家数据(如果它不存在),但我的语句每次都会创建一个新行。这是我写的方法:
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 键发现冲突 - 它只是忽略行并尝试下一个(如果它的批量插入或只是结束查询)没有任何错误。 此查询的结果为您提供了 成功 插入的行。
如果您真的不需要更新行,则忽略重复项更快