2016-10-19 46 views
0
ResultSet rs; 

PreparedStatement ps; 

Connection con; 

public Attribute() { 


    try{ 

     con = DriverManager.getConnection("jdbc:ucanaccess://D:/programming/myassignment/Database1.accdb"); 
     System.out.println("Java is now connected to database"); 


    }catch(Exception ex){ 
     System.out.println(ex); 
    } 

JButton btnAdd = new JButton("Add"); 
    btnAdd.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 


    try{ 

PreparedStatement pstmt = (PreparedStatement) con.prepareStatement("insert into table1(Attributes) values(?)"); 
        pstmt.setString(1, textField.getText()); 
        pstmt.executeUpdate(); 
        pstmt.close(); 





      }catch (Exception ex){ 
       System.out.println(ex); 

      } 

     } 
    }); 
    btnAdd.setBounds(152, 203, 89, 23); 
    contentPane.add(btnAdd); 

此代碼連接到數據庫,但每當我插入一個屬性,它都會給出上述錯誤。完整性約束違規:NOT NULL檢查約束

這個數據庫正在被兩個類使用。第一類將類名插入到ClassName列中,然後我將點擊添加屬性按​​鈕打開上面提到的類。當我在此插入屬性,並按下「添加」按鈕,它會給出以下錯誤:

net.ucanaccess.jdbc.UcanaccessSQLException:UCAExc ::: 3.0.7完整性約束違規:NOT NULL檢查約束; SYS_CT_10359表:TABLE1列:CLASSNAME

+0

的錯誤味精是顯而易見的我。 classname列獲得NULL – Drew

+0

是的,但類名列不是null。首先我輸入類名,然後輸入屬性。 數據庫中的類名稱列顯示類名稱。其非空 –

+0

這是顯示我的朋友:p – Drew

回答

2

看起來像表TABLE1在CLASSNAME列上有一個NOT NULL約束。

這意味着,如果沒有CLASSNAME列的值,則無法向表中插入新行。

插入CLASSNAME後,您應該使用屬性更新同一行。

您當前的代碼嘗試插入僅包含屬性的新行,因此約束會引發錯誤。

您的更新聲明應如下所示。

PreparedStatement pstmt = (PreparedStatement) con.prepareStatement("update table1 set Attributes = ? where CLASSNAME = ?"); 
pstmt.setString(1, textField.getText()); 
pstmt.setString(2, "Previously Inserted Classname"); 

此外,檢查如果表中有任何其他約束(包括一個唯一的主鍵)

+0

我明白你的觀點和工作。但我沒有得到「以前插入的類名」部分。 –

+0

我該寫什麼?我之前輸入的班級名稱? –

+0

@AhsonJunani是的,你輸入的類名。 –