2014-03-29 216 views
-1

我試圖更新表:違反唯一約束?

create table Out_Patient(Patient_ID number(8) primary key , 
First_Name varchar2(20) , 
Last_Name varchar2(20) , 
Gender varchar2(10) , 
Mobile_Number number(12) , 
Address varchar2(20), 
Date_Of_Birth Date , 
Date_Of_Entry Date) 

與FOLL。代碼:

PreparedStatement st= con.prepareStatement("Update Out_Patient Set Patient_ID=?,First_Name=?,Last_Name=?,Gender=?,Mobile_Number=?,Address=?,Date_Of_Birth=?,Date_Of_Entry=?"); 
String t1=text1.getText(); 
     int id=Integer.parseInt(t1); 
     String t2=text2.getText(); 
     String t3=text3.getText(); 
     String t4=text4.getText(); 
     String t5=text5.getText(); 
     String t6=text_dob.getText(); 
     String t7=text_doe.getText(); 
     String s1=combo_gender.getSelectedItem().toString(); 
      st.setInt(1,Integer.parseInt(t1)); 
     st.setString(2,t2); 
     st.setString(3,t3); 
     st.setString(4,s1); 
     st.setString(5,t5); 
     st.setString(6,t4); 
     st.setString(7,t6); 
     st.setString(8,t7); 

      st.executeUpdate(); 

但我收到ORA-00001:違反了唯一性約束。 我知道Patient_ID是表中的主鍵,但在輸入詳細信息時,我保持與表中的相同。應該做出什麼樣的更改。 請幫助! 謝謝..

回答

1

世界上沒有WHERE在JDBC更新語句子句,因此你想設置相同ID的所有記錄。看看這個例子:Creating a PreparedStatement Object

+0

我甚至改爲 String t1 = text1.getText(); int id = Integer.parseInt(t1); 「更新Out_Patient Set First_Name = ?, Last_Name =?,Gender =?,Mobile_Number = ?, Address = ?, Date_Of_Birth =?,Date_Of_Entry =?其中Patient_ID = id」 然後我得到:無效的標識符ID – user3367768

+0

這可能是因爲你寫了「哪裏Patient_ID = id」,這個「id」標識符被視爲一個值,而不是一個參數。試試這個:「Patient_ID =?」並在java代碼中爲此參數賦值st.setInt(9,Integer.parseInt(t1)); –

+0

我包括where子句Patient_ID =? – user3367768