我在Java中有这段代码来替换我的高分表中的最低分数,但是如果我得到两个或两个以上相同分数,并且这是表中的最低分数,它将替换所有分数,但是我只想替换其中的1他们(任何人)。


  PreparedStatement prepareStatement = conn.prepareStatement(“ UPDATE高分SET名称=?,
     分数=?,时间=?,级别=? WHERE得分=(从得分最高的ORDER BY得分> ASC中选择前1个得分)“);
  
  prepareStatement.setString(1,name);
  
  prepareStatement.setInt(2,score);
  
  prepareStatement.setInt(3,time);
  
  prepareStatement.setString(4,level);
  
  int updateCount = prepareStatement.executeUpdate();


嘿,如果有一种方法只能在我得到2个或更多具有相同值的值时仅更新1(查询首先找到)值,那么我很痛苦。

最佳答案

这似乎不是与Java有关的问题,而是与数据库设计有关的问题。

通常,表中的每一行都必须是唯一可识别的(根据关系模型理论);这称为数据完整性。实现此目的的最简单方法是在表中添加一个用作主键的属性。

通常,主键是一个从1开始的整数,并且对于您在表中添加的每一行都增加主键。

现在来看您的问题:只需在表中添加一个主键,然后可以将“ where”条件修改为:

UPDATE Highscore
SET Name = ?, Score = ?, Time = ?, Level = ?
WHERE PrimaryKey = (SELECT TOP 1 PrimaryKey FROM Highscore ORDER BY Score)


请注意,“ where”条件从您的分数中获取主键,为简单起见称为“ PrimaryKey”,然后将对其进行更新。

10-06 05:11