UCanAccessSQLException:违反约束
UCanAccessSQLException: constraint violation
我的 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 + "\");";
table 个条目的主键是(标题,日期)。
table.
中不存在我要插入的信息
我制作了一个包含相同字符串的 System.out.println() 以确保变量包含正确的信息,它们确实如此。
谁能告诉我哪里做错了?
(从评论到问题:)
I tried inserting a row, and it worked. But when I tried to insert more rows, the problem occurred.
如果 table 的主键是 (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
插入将失败,因为 Title
和 Date
的组合已经存在于 table 中。是的,那行 "doesn't exist" 因为 Text
和 Time
值不同,但是主键约束不在乎;它只查看 Title
和 Date
列。
如果您确实需要插入第二行,那么您需要更改 table 的主键。
我的 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 + "\");";
table 个条目的主键是(标题,日期)。 table.
中不存在我要插入的信息我制作了一个包含相同字符串的 System.out.println() 以确保变量包含正确的信息,它们确实如此。
谁能告诉我哪里做错了?
(从评论到问题:)
I tried inserting a row, and it worked. But when I tried to insert more rows, the problem occurred.
如果 table 的主键是 (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
插入将失败,因为 Title
和 Date
的组合已经存在于 table 中。是的,那行 "doesn't exist" 因为 Text
和 Time
值不同,但是主键约束不在乎;它只查看 Title
和 Date
列。
如果您确实需要插入第二行,那么您需要更改 table 的主键。