2016-10-19 17 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検査制約

このデータベースは2つのクラスで使用されています。最初のクラスはClassName列にクラス名を挿入します。そして、Add属性ボタンをクリックして上記のクラスを開きます。これに属性を挿入して「追加」ボタンを押すと、次のエラーが表示されます。

net.ucanaccess.jdbc.UcanaccessSQLException:UCAExc ::: 3.0.7整合性制約違反:NOT NULL検査制約。 SYS_CT_10359テーブル:TABLE1カラム:CLASSNAME

+0

を持っている場合

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

また、確認してください。クラス名の列はNULL – Drew

+0

ですが、クラス名の列はnullではありません。最初にクラス名を入力してから属性を入力します。 データベースのクラス名列にクラス名が表示されています。そのヌル –

+0

どこが私の友人を示していますか:p – Drew

答えて

2

テーブルTABLE1のように見えますが、カラムCLASSNAMEにNOT NULL制約があります。

つまり、CLASSNAME列の値を持たないテーブルに新しい行を挿入することはできません。

CLASSNAMEを挿入した後、同じ行を属性で更新する必要があります。

現在のコードでは、属性のみを指定して新しい行を挿入しようとしているため、制約でエラーが発生します。

あなたの更新ステートメントは次のとおりです。テーブルには、エラーMSGが私には明らかである(一意の主キーを含む)、その他の制約

+0

で何をしているのか分かりませんが、私はあなたの要点とその働きを知っています。しかし、私は "以前に挿入されたクラス名"の部分を取得しませんでした。 –

+0

ここに何を書きますか?前に入力したクラス名? –

+0

@AhsonJunaniはい、前に入力したクラス名です。 –

関連する問題