亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

主鍵輸入重復?

主鍵輸入重復?

侃侃無極 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 關注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號