Java 完整性约束冲突:非空检查约束

Java 完整性约束冲突:非空检查约束,java,swing,ms-access,ucanaccess,Java,Swing,Ms Access,Ucanaccess,这段代码正在连接到数据库,但每当我插入一个属性时,就会出现上述错误 该数据库正由两个类使用。第一个类将把类名插入ClassName列,然后我将单击addattribute按钮打开上面提到的类。当我在其中插入属性并按下“添加”按钮时,会出现以下错误: net.ucanaccess.jdbc.UcanaccessSQLException:UCAExc:::3.0.7完整性约束冲突:非空检查约束;SYS_CT_10359 table:TABLE1 column:CLASSNAME看起来TABLE1对c

这段代码正在连接到数据库,但每当我插入一个属性时,就会出现上述错误

该数据库正由两个类使用。第一个类将把类名插入ClassName列,然后我将单击addattribute按钮打开上面提到的类。当我在其中插入属性并按下“添加”按钮时,会出现以下错误:


net.ucanaccess.jdbc.UcanaccessSQLException:UCAExc:::3.0.7完整性约束冲突:非空检查约束;SYS_CT_10359 table:TABLE1 column:CLASSNAME

看起来TABLE1对column CLASSNAME有一个NOTNULL约束

这意味着,如果CLASSNAME列没有值,就不能在表中插入新行

插入类名后,应该使用属性更新同一行

当前代码尝试插入仅包含属性的新行,因此约束会引发错误

您的更新声明应如下所示

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);

另外,检查表是否有任何其他约束(包括唯一主键)

错误消息对我来说是显而易见的。classname列将获得NULLyeah,但classname列不为null。首先输入类名,然后输入属性。数据库中的“类名”列将显示类名。我的朋友:pI删除了
mysql
标记。我不知道在这里使用ms accessi做了什么我明白你的意思,它起作用了。但是我没有得到“以前插入的类名”部分。我应该在这里写什么?我以前输入的类名?@AhsonJunani是的,您以前输入的类名。如果有另一个类似这样的类,我必须在其中插入函数,该怎么办?就像我点击enterfunction按钮一样,这会打开另一个类,然后我在那里插入我的函数;setString(1,textField.getText());pstmt.setString(2,“Ahson”);pstmt.executeUpdate();pstmt.close();
PreparedStatement pstmt = (PreparedStatement) con.prepareStatement("update table1 set Attributes = ? where CLASSNAME = ?");
pstmt.setString(1, textField.getText());
pstmt.setString(2, "Previously Inserted Classname");