gpt4 book ai didi

java - UCanAccess:打开和关闭必填字段以防止违反完整性约束:NOT NULL 错误

转载 作者:行者123 更新时间:2023-11-29 04:48:39 24 4
gpt4 key购买 nike

我正在努力将 Java 与旧的 Access 数据库连接起来,因为这就是要求。

我不断收到错误:

integrity constraint violation: NOT NULL error 

但是当我进入数据库时​​,我发现其中一个必填字段中有很多字段实际上为空。我猜必填字段是后来添加的。当我将该字段设置为不需要时,我的代码工作正常。

enter image description here

它需要是必需的,这样输入数据的人就不会忘记它,但与此同时,有超过 20000 条记录没有这个字段,因为它是最近添加的,我猜。

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

这是我的代码(为公开编辑),它确实有效:

    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 数据库可能有一个实际上包含一些 NULL 值的 NOT NULL 列。

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

他们实现的妥协是,如果发现表的 NOT NULL 列中有 NULL 值,则会发出警告并将表设为只读(因此 UCanAccess 可以安全地忽略 NOT NULL 约束):

WARNING:Detected Not Null constraint breach, table Table2, record ... : making the table Table2 readonly

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

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

根据您的屏幕截图,有问题的字段具有“允许零长度=是”,因此您只需在 Access 中打开数据库并使用更新列

UPDATE TableName SET FieldName='' WHERE FieldName IS NULL

应用更改后,UCanAccess 将能够更新表格。

关于java - UCanAccess:打开和关闭必填字段以防止违反完整性约束:NOT NULL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36271325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com