Mysql重复条目'xxxxxxxx'为密钥(唯一)'xxxxxxxxxx'

时间:2015-05-22 09:26:40

标签: java mysql

我有更新行的问题。我有一个名为serialNum的列varchar(50) not null unique default null

当我从合作伙伴公司获得响应数据时,我将根据唯一serial_num(我们公司的序列号)更新行。

有时更新因以下原因失败:

Duplicate entry 'xxxxxxxx' for key  'serialNum'

但是当我搜索整个表时,更新的值不存在。它有时会发生,而不是总是如此,大概是300次中的10次。

为什么会发生这种情况,我该如何解决?

下面是我用来更新的查询:

String updateQuery = "update phone set serialNum=?, Order_state=?, Balance=? where Serial_num=" + resultSet.get("jno_cli");
PreparedStatement presta = con.prepareStatement(updateQuery);
presta.setString(1, resultSet.get("oid_goodsorder"));
presta.setString(2, "order success");
presta.setFloat(3, Float.valueOf(resultSet.get("leftmoney")));
presta.executeUpdate();

1 个答案:

答案 0 :(得分:0)

我认为原因是resultSet.get("oid_goodsorder")你在哪里得到这个结果? 'oid_goodsorder'是独一无二的吗?你总是更新整张桌子吗?
如果 oid_goodsorder 是唯一的,则可能在serialNum中有重复项,因为您不使用批量更新,而是单独更新每条记录,因此可以:

之前:
SERIALNUM = 11,22,33,44 oid_goodsorder = 44,11,22,33

它尝试将第一个serialNum更新为44,但44存在!
但如果你完成所有更新serialNum将是唯一的...

  1. 如果您想获取错误行,则可以禁用集合serialNum不唯一,并检查表格是否重复serialNum
  2. 如果您没有重复值,请尝试使用批量更新 Java - how to batch database inserts and updates