Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java UCanAccess:打开和关闭必需字段以防止完整性约束冲突:非空错误_Java_Ms Access_Jdbc_Hsqldb_Ucanaccess - Fatal编程技术网

Java UCanAccess:打开和关闭必需字段以防止完整性约束冲突:非空错误

Java UCanAccess:打开和关闭必需字段以防止完整性约束冲突:非空错误,java,ms-access,jdbc,hsqldb,ucanaccess,Java,Ms Access,Jdbc,Hsqldb,Ucanaccess,我正致力于将Java与旧的Access数据库连接起来,因为这就是我要问的 我不断得到错误: integrity constraint violation: NOT NULL error 但是当我进入数据库时,我发现很多字段在一个必填字段中实际上是空的。我猜必填字段是后来添加的。当我将字段设置为not required时,我的代码工作正常 它是必需的,以便输入数据的人不会忘记它,但同时,有20000多条记录没有这个字段,因为我猜这是最近添加的 是否有一种方法可以通过UCanAccess从jav

我正致力于将Java与旧的Access数据库连接起来,因为这就是我要问的

我不断得到错误:

integrity constraint violation: NOT NULL error 
但是当我进入数据库时,我发现很多字段在一个必填字段中实际上是空的。我猜必填字段是后来添加的。当我将字段设置为not required时,我的代码工作正常

它是必需的,以便输入数据的人不会忘记它,但同时,有20000多条记录没有这个字段,因为我猜这是最近添加的

是否有一种方法可以通过UCanAccess从java打开和关闭此表的必填字段?我想这可能不太理想,最好关闭它,在Access中的一个数据输入表单中创建一个检查,以确保该字段已填充?最好的方法是什么?不幸的是,除了Java和Access之外,我没有很多工具可以使用。我不确定最好的做法是什么

这是我为public编辑的代码,它实际上是有效的:

    TimeEntry t = new TimeEntry();
    ArrayList<TimeEntry> tList = new ArrayList<TimeEntry>();
try{
            Connection conn=DriverManager.getConnection("jdbc:ucanaccess://\\\\server\\folder1\\folder2\\folder3\\folder4\\folder5\\Database21.mdb");
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery("SELECT [PLANT], [DEPARTMENT], [WONum] FROM [Query1] where [Entry-dt] >= #2/26/2016# ");
        while (rs.next()) {

            t.setPlant(rs.getString(1));
            t.setDept(rs.getString(2));
            t.setWo(rs.getString(3));
            System.out.println(t.toString());
            tList.add(t);
            t = new TimeEntry();

            System.out.println(rs.getString(3));
            }

        } catch(Exception e){

        }

Microsoft Access允许现有记录在字段列从Required=No NULL约束转换为Required=Yes NOT NULL约束后保留NULL值。因此,Access数据库可能有一个实际包含一些空值的NOTNULL列

UCanAccess用作后台数据库的HSQLDB不允许这样做。因此,UCanAccess开发团队需要找到协调这两种行为的方法。他们不想完全忽略NOTNULL约束,原因与您在问题中引用的相同,但他们也不想强迫用户更改该表中的数据,如果他们只想读取该数据

他们实施的折衷方案是,如果发现表的NOT NULL列中有NULL值,则会发出警告,并将该表设置为只读,以便UCanAccess可以安全地忽略NOT NULL约束:

警告:检测到非空约束违反,表2,记录…:将表2设置为只读

如果您只想从该表中读取,那么您可以忽略该警告。如果需要写入该表,则需要修复NOTNULL列中的数据

UCanAccess无法支持ALTER TABLE语句,因此无法更改现有列的[NOT]NULL状态

根据您的屏幕截图,相关字段的Allow Zero Length=Yes,因此您只需在Access中打开数据库,并使用

UPDATE TableName SET FieldName=其中FieldName为空 应用该更改后,UCanAccess将能够更新该表