Java 在MySql查询中如何使用if-else?

Java 在MySql查询中如何使用if-else?,java,mysql,sql,minecraft,bukkit,Java,Mysql,Sql,Minecraft,Bukkit,因此,我有下面的代码(Java),它使用1个查询来检查表是否包含带有播放器UUID的寄存器,并且只有在mysql发送了结果之后,它才能决定在另一个查询中使用UPDATE或INSERT // Assuming that I have variables like these: // String uid = "ffffffff-ffff-ffff-ffff-ffffffffffff"; // This is a Minecraft UUID. // int languageID = 1; // T

因此,我有下面的代码(Java),它使用1个查询来检查表是否包含带有播放器UUID的寄存器,并且只有在mysql发送了结果之后,它才能决定在另一个查询中使用UPDATE或INSERT

// Assuming that I have variables like these:
// String uid = "ffffffff-ffff-ffff-ffff-ffffffffffff"; // This is a Minecraft UUID.
// int languageID = 1; // This is a simple Integer
ResultSet set = stm.executeQuery("SELECT language FROM players WHERE UUID = '" + uid + "';");
set.beforeFirst();
while (set.next()){
    // This will run if in the table already contains the UUID = the uid.
    stm.execute("UPDATE players SET language = '" + languageID + "' WHERE UUID = '" + uid +"';");
    return;
}
// This will just run if the resultSet is empty.
stm.execute("INSERT INTO players(UUID, language) values('" + uid + "','" + languageID +"')");
我需要将此代码转换为一个mysql查询,以避免服务器中的延迟,因为每次有人加入我的BungeeCord服务器时,都会执行此代码。尽管此代码位于异步任务中,但仍可能导致一些问题

事实上,我不知道如何在sql中使用IF函数来检查该表是否包含带有播放器UUID的寄存器:

IF (/* HERE IS THE PROBLEM */) THEN {
   UPDATE players SET ... WHERE ... // update the result
}
ELSE {
  INSERT INTO players ... // insert a new register in the table
}

谢谢。

您想要
插入。在重复密钥更新时
。大概是这样的:

INSERT INTO players(UUID, language)
     VALUES (uid, languageID)
     ON DUPLICATE KEY UPDATE language = VALUES(language);
请注意,即使将
IF
移动到数据库中(在存储过程中),也不能消除争用条件。唯一的方法是锁定表以进行更新。但是,您可以在一个语句中完成所有这些,因此这是最好的方法


此外,这假定您在表上有唯一的索引或主键来标识重复项。

然后
*starters@keyser谢谢,哈哈,修好了。@Gordon_Linoff类似的东西<代码>stm.execute(“插入到播放器(UUID,语言)值(“+UUID+”,“+lang.getId()+”)”)“+”在重复键更新语言=“+lang.getId()+”)”我更喜欢使用
值(语言)
而不是重复
lang.getId()
两次。但两种版本都有效。