Java sql-当我得到2个或更多具有相同值的值时,如何仅更新1(查询找到的第一个)值?

Java sql-当我得到2个或更多具有相同值的值时,如何仅更新1(查询找到的第一个)值?,java,sql,hsqldb,Java,Sql,Hsqldb,我用java编写了这段代码来替换highscore表中的最低分数,但是如果我有两个或两个以上的分数相同,并且这是表中的最低分数,它将替换所有的分数,但是我只想替换其中的一个 PreparedStatement PreparedStatement=conn.prepareStatementUPDATE Highscore集合名称=?, 分数=?,时间=?,级别=?其中Score=按分数>ASC从Highscore ORDER中选择前1名分数 preparedStatement.SetString,

我用java编写了这段代码来替换highscore表中的最低分数,但是如果我有两个或两个以上的分数相同,并且这是表中的最低分数,它将替换所有的分数,但是我只想替换其中的一个

PreparedStatement PreparedStatement=conn.prepareStatementUPDATE Highscore集合名称=?, 分数=?,时间=?,级别=?其中Score=按分数>ASC从Highscore ORDER中选择前1名分数

preparedStatement.SetString,名称

preparedStatement.setInt2,分数

preparedStatement.setInt3,时间

准备好的报表。设置字符串4,级别

int updateCount=preparedStatement.executeUpdate


嘿,我在想,当我得到2个或更多具有相同值的值时,是否有一种方法只在查询找到值的第一次更新1。

一种简单的方法是拆分查询?所以你得到了,比如说,id,然后进行更新

否则,请查看以下内容:

 UPDATE Table 
 SET Field = Whatever     
 WHERE id = (SELECT TOP 1 id FROM Highscore ORDER BY Score ASC)

这似乎不是一个与Java相关的问题,而是一个与数据库设计相关的问题

通俗地说,根据关系模型理论,表中的每一行都必须是唯一可识别的;这称为数据完整性。实现这一点的最简单方法是在表中添加一个充当主键的属性

通常,主键是一个从1开始的整数,对于表中添加的每一行,主键都会递增

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

UPDATE Highscore 
SET Name = ?, Score = ?, Time = ?, Level = ? 
WHERE PrimaryKey = (SELECT TOP 1 PrimaryKey FROM Highscore ORDER BY Score)
请注意,“where”-条件从您的分数中获取主键,对于simplicty称为“PrimaryKey”,然后将对其进行更新