使用UCanAccess创建表后,ms访问不强制执行非空约束

时间:2018-01-17 18:05:57

标签: java ms-access ucanaccess

这是此this问题的后续问题。现在新的UCanAccess版本的错误有点不同。

我使用最新的UCanAccess(4.0.3,包括Jackcess 2.1.9)创建一个包含NOT-NULL列的表的数据库文件,如下所示

    // Create a database + connect
    DatabaseBuilder.create(FileFormat.V2010, new File(path));
    Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");     
    conn = DriverManager.getConnection("jdbc:ucanaccess://" + path + ";singleconnection=true" ,"", ""); 

    // Create table     
    String sql = "CREATE TABLE Test (id AUTOINCREMENT PRIMARY KEY, value CHAR(1) NOT NULL)";
    conn.createStatement().executeUpdate(sql);

尝试插入值通过UCanAccess正常工作,对于列'值'按照预期由UCanAccess提供。 但是,当我直接在Access中使用表时,接受NULL!通过UCanAccess处理数据 后来导致问题,因为表格无法写入:

  

警告:检测到Not Null约束违规,表测试,记录   Row [87:1] [{id = 2,value =}]:使表格只读

从Access中的设计视图中打开并保存表可以解决问题,但从长远来看,这不是一个选项。 如何使Access遵循NOT-NULL约束?

1 个答案:

答案 0 :(得分:2)

这已追溯到Jackcess 2.1.10的known issue。它应该分别在即将发布的Jackcess和UCanAccess版本中修复。