В вашем выражении sql отсутствует предложение where, поэтому все ваши pets
обновляются до всех одинаковых значений, и одно из этих значений выглядит как первичный ключ, который нарушает ограничение первичного ключа
Попробуйте изменить выражение SQL на
UPDATE PETS SET PETPHOTO=?, PETTYPE=?, COLOR=?,GENDER=?,ISSTERILIZED=?,PEDIGREE=?,DATE_ENTRY=?,VACCINE1=?,VACCINE2=?,VACCINE3=? WHERE PETNAME=?
. Это предполагает, что PETNAME
является первичным ключом? В противном случае потребуется еще проделать определенную работу, чтобы получить идентификатор строки, которую вы хотите обновить
Обновление
После недавнего обновления вашего sql вы должны настроитьваши подготовленные параметры заявления. PETNAME
был перемещен в последнюю позицию, так что должна быть точка 11, а остальные должны быть соответствующим образом скорректированы
pstmt.setString(11, petname);
pstmt.setString(1, petphoto);
pstmt.setString(2, pettype);
pstmt.setString(3, color);
pstmt.setInt(4, gender);
pstmt.setInt(5, isSterilized);
pstmt.setString(6, pedigree);
pstmt.setString(7, date_entry);
pstmt.setString(8, vaccine1);
pstmt.setString(9, vaccine2);
pstmt.setString(10, vaccine3);
Если вы изменили свой запрос немного иначе, вы можете использовать именованные параметры вместо позиционных, тогда таким образомесли вы изменили местоположение указанного параметра, вам не пришлось бы перенастраивать позиции:
Пример:
"UPDATE PETS SET PETPHOTO=:PETPHOTO, PETTYPE=:PETTYPE"
pstmt.setString("PETPHOTO", petphoto);
pstmt.setString("PETTYPE", pettype);
И т.д. ...