【问题标题】:integrity constraint violation: NOT NULL check constraint违反完整性约束:NOT NULL 检查约束
【发布时间】:2017-03-01 09:02:31
【问题描述】:
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 列中,然后我将单击添加属性按​​钮以打开上述类。当我在其中插入属性并按“添加”按钮时,会出现以下错误:

net.ucanaccess.jdbc.UcanaccessSQLException:UCAExc:::3.0.7 完整性约束违规:NOT NULL 检查约束; SYS_CT_10359 表:TABLE1 列:CLASSNAME

【问题讨论】:

  • 错误信息对我来说很明显。类名列正在获取 NULL
  • 是的,但类名列不为空。首先我输入类名,然后输入属性。数据库中的类名列显示类名。它不为空
  • 我朋友看到的那个在哪里:p
  • 我删除了mysql 标签。不确定使用 ms-access 在这里做什么

标签: java swing ms-access ucanaccess


【解决方案1】:

看起来表 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");

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

【讨论】:

  • 我明白你的意思和它的工作原理。但我没有得到“以前插入的类名”部分。
  • 我应该在这里写什么?我之前输入的班级名称?
  • @AhsonJunani 是的,你之前输入的类名。
  • 如果有另一个像这样的类我必须插入一个函数怎么办?就像我点击进入函数按钮,这会打开另一个类,然后我在那里插入我的函数。
  • PreparedStatement pstmt = (PreparedStatement) con.prepareStatement("update table1 set Functions = ? where Attributes = ? where CLASSNAME = ?"); pstmt.setString(1, textField.getText()); pstmt.setString(2, "阿森"); pstmt.executeUpdate(); pstmt.close();
猜你喜欢
  • 2014-11-27
  • 2016-12-13
  • 2020-10-02
  • 2018-03-20
  • 2021-06-10
  • 2021-03-24
  • 1970-01-01
  • 2015-11-01
  • 2020-01-14
相关资源
最近更新 更多