UCanAccessSQLException:约束违规

时间:2015-05-31 14:37:43

标签: java composite-primary-key ucanaccess

我的Java程序出现问题。 我使用MS Access作为数据库,使用UCanAccess连接数据库。

当我试图将文本插入数据库时​​,我得到一个例外:

net.ucanaccess.jdbc.UcanaccessSQLException: integrity constraint violation: unique constraint or index violation; ENTRIES_PRIMARYKEY table: ENTRIES

这是SQL语句,导致异常:

"INSERT INTO Entries (Text, Title, Date, Time) VALUES"
                + "(\"" + text + "\", \"" + title + "\", \"" + date  + "\", \"" + time + "\");";

表条目的主键是(标题,日期)。 我插入的信息不存在于表格中。

我已经制作了一个包含相同字符串的System.out.println(),以确保变量包含正确的信息,并且确实如此。

有人能告诉我我做错了吗?

1 个答案:

答案 0 :(得分:1)

(从评论到问题:)

  

我尝试插入一行,但它确实有效。但是当我尝试插入更多行时,问题就出现了。

如果表的主键为(Title, Date),那么这两列(字段)中的值必须在所有行中都是唯一的。也就是说,您可以插入一个看起来像

的行
Text        Title   Date        Time
----------  ------  ----------  --------
some text   Title1  2015-06-01  05:56:15

但是如果你尝试插入这样的另一行

Text        Title   Date        Time
----------  ------  ----------  --------
other text  Title1  2015-06-01  06:15:44

插入将失败,因为表中已存在TitleDate的组合。是的,那一行"不存在"因为TextTime值不同,但主键约束并不关心;它只会查看TitleDate列。

如果您确实需要插入第二行,那么您需要更改该表的主键。