2015-05-22 2 views
3

У меня проблема с обновлением строки. У меня есть столбец под названием serialNum с varchar(50) not null unique default nullMysql Повторяющаяся запись 'xxxxxxxx' для ключа (уникальная) 'xxxxxxxxxx'

Когда я получаю данные ответа от компании-партнера, я буду обновлять строку в соответствии с (серийный NUM нашей компании) уникального serial_num.

Иногда обновления произошел сбой из-за:

Duplicate entry 'xxxxxxxx' for key 'serialNum' 

Но значение для обновления не существует, когда я искать всю таблицу. Это случается иногда, не всегда, примерно в 10 раз из 300.

Почему это происходит и как я могу его решить?

ниже запрос я использую, чтобы обновить:

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(); 
+2

MySQL по умолчанию нечувствителен к регистру. Может быть, поэтому он находит дубликаты? – khelwood

+0

Также будьте осторожны с ведущими/конечными пробелами –

+1

Покажите нам полные запросы, которые вы используете для обновления и поиска. –

ответ

0

Я думаю, что причина в resultSet.get("oid_goodsorder"), где вы получите этот результат? is '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