为了账号安全,请及时绑定邮箱和手机立即绑定

主键输入重复?

主键输入重复?

侃侃无极 2023-11-01 21:49:01
我正在尝试更新 JAVA 代码上数据库的值,但是当我尝试这样做时,它告诉我“主键的重复条目(nameOfSomething)”;即使 PK 不存在,也会给我这个错误,我不知道为什么。欢迎所有帮助;如果需要更多代码,我很乐意添加它。提前致谢。/**SO THE NEW ERROR WOULD BE ON THE IF/ELSE STATEMENT, WHICH IS TRHOWING THE ELSE, THAT SAYS "DATA WAS NOT UPDATED".*/JButton btnUpdate = new JButton("Update");        btnUpdate.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                String petname = txtName.getText();                String petphoto = txtPhoto.getText();                String pettype = txtType.getText();                String color = txtColor.getText();                int gender = Integer.parseInt(txtGender.getText());                int isSterilized = Integer.parseInt(txtSterilized.getText());                //DATE                String pedigree = txtPedigree.getText();                DateFormat df = new SimpleDateFormat("yyyy-MM-dd");                String date_entry = df.format(datePicker.getDate());                //END                String vaccine1 = txtVaccine1.getText();                String vaccine2 = txtVaccine2.getText();                String vaccine3 = txtVaccine3.getText();                Connection conn = null;                PreparedStatement pstmt = null;                try {                    Class.forName("com.mysql.jdbc.Driver");                    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/refugio","root","2797");                    pstmt = conn.prepareStatement("UPDATE PETS SET PETPHOTO=?, PETTYPE=?, COLOR=?,GENDER=?,ISSTERILIZED=?,PEDIGREE=?,DATE_ENTRY=?,"                            + "VACCINE1=?,VACCINE2=?,VACCINE3=? WHERE PETNAME=?"); //NEW CHANGE HERE                }            }        });
查看完整描述

2 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

您的sql语句缺少where子句,因此导致您的所有值pets都更新为相同的值,并且这些值之一看起来是违反主键约束的主键


尝试将您的sql语句更改为


UPDATE PETS SET PETPHOTO=?, PETTYPE=?, COLOR=?,GENDER=?,ISSTERILIZED=?,PEDIGREE=?,DATE_ENTRY=?,VACCINE1=?,VACCINE2=?,VACCINE3=? WHERE PETNAME=?


这是假设是PETNAME主键吗?否则,需要做更多工作才能获取要更新的行的 ID


更新


最近更新 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);

ETC...


查看完整回答
反对 回复 2023-11-01
?
白板的微信

TA贡献1883条经验 获得超3个赞

看起来您的更新查询缺少 where 条件。如果您在没有 where 条件的情况下运行更新脚本,则所有行的相同数据都会更新。



查看完整回答
反对 回复 2023-11-01
  • 2 回答
  • 0 关注
  • 86 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信