0

我试图避免重复更新数据,所以我想知道是否有一种方法可以只更新一个行字段而不更新后续行中的一条数据。所以这是场景,我有这个代码:

String sql = "update VAGAS set Matricula ='" +txtMat.getText()
    + "'  where Curso ='" +combocurso.getSelectedItem().toString()
    + "' AND Turma='"+turmacombo.getSelectedItem().toString()+"'";
pstmt = conLogin.prepareStatement(sql);
pstmt.execute();
JOptionPane.showMessageDialog(null, "Vagas atualizados com sucesso!");

我想更新字段Matricula(表示学生订阅 ID),其中课程 ( Curso) 等于combocurso.getSelectedItem().toString()组合框,其中turma(表示课程教室已填满组)等于combocurso.getSelectedItem().toString()组合框。

除了一个问题外,一切都更新正常,例如,我有Matricula同名 ( 1ACC) 的行,代表 2 个教室空缺。当我调用更新时,它会用一个Matricula不需要的数字填充它们,因为我只想填充一个空缺,但由于它们都有相同的名称,它会填充两者。

所以有一个名为Vagas(不是表名而是列名)的第一个字段(列),它是一个int identity (1,1)字段,当我调用更新命令时我只想填写一个字段。我试图通过与Vagas列进行比较来做到这一点,但我似乎无法找到一种方法来做到这一点。

4

1 回答 1

1

如果您有多个满足您的条件的记录,并且您只想更新其中一个记录,那么您显然没有足够的条件进行更新。这不是代码问题,而是设计问题……您需要从当前选择的众多记录中选择您希望如何选择要更新的记录。那么你想如何选择要更新的记录呢?

如果您的答案是它真的没关系,您可以在标识列上使用聚合函数作为约束,例如:

WHERE ... AND Vagas = (SELECT MIN(Vagas) FROM VAGAS WHERE ...)

请注意,“...”代表您已经在使用的条件。我的代码片段只是选择具有最低 Vagas 值的 VAGAS 记录(通过 select 子查询)。

于 2013-05-19T15:44:02.407 回答