gpt4 book ai didi

android - 插入具有复合主键的android sqlite3表的问题

转载 作者:行者123 更新时间:2023-11-29 22:30:12 24 4
gpt4 key购买 nike

我有一个包含复合主键的表,但在插入时遇到问题。用于创建表的代码是:

CREATE TABLE ClassEvent (
EventName varchar(10) NOT NULL,
CourseId varchar(10) NOT NULL,
EventType varchar(20),
EventWeight number(3),
DueDate DATE NOT NULL,
FOREIGN KEY (CourseId) REFERENCES Courses(CourseId),
PRIMARY KEY (CourseId, EventName));

我遇到的问题是,当我想插入的记录的值对于 CourseId 或 EventName 列可能不是唯一的,而是 2 的唯一组合。例如,如果我尝试运行以下 2 个插入:

INSERT INTO ClassEvent VALUES('Assignment 1','60-415','Assignment',10,'12/10/2010');
INSERT INTO ClassEvent VALUES('Project 1','60-415','Project',15,'5/12/2010');

我收到以下错误:

Error: columns CourseId, EventName are not unique.

并且第二个插入没有进入数据库。为什么会出现这个错误?我认为复合主键要求两个值的组合 是唯一的。在我上面的插入中,即使 CourseId 的值相同,EventName 列的值也不同。这不应该被视为 2 个独特的组合,因此是 2 个不同的主键吗?

我的表需要能够为每个 CourseId 保存多个不同的事件,但每个事件对于每个类(class)都必须是唯一的。我需要能够将值插入表中,例如:

EventName CourseId作业 1 60-415项目 1 60-415作业 2 60-415项目 2 60-415作业 1 60-367项目1 60-367

等等。谁能告诉我如何让它工作?为什么这些复合 PK 不被视为独特的条目?任何帮助将非常感激。


这是我用于插入的 java 函数:

public void addNewClassEvent(ContentValues values) {
SQLiteDatabase db = openConnection();

db.insert("ClassEvent", null, values);
db.close();
}

这会导致问题吗?

最佳答案

你可以在 SQLite 中有一个复合主键,但是你创建表时必须创建键:

   CREATE TABLE example1(
field1 FLOAT,
field2 TEXT,
PRIMARY KEY(field1, field2)
);

您不能在事后使用 ALTER TABLE 创建主键。

另一方面,您可以在事后创建一个 UNIQUE INDEX这与 PRIMARY KEY 具有基本相同的效果:

   CREATE UNIQUE INDEX pk_index ON "table1"("field1","field2");

我不确定您是如何创建这些表的,也不确定您稍后是否添加了主索引,但是将数据库抓取到您的桌面,并检查在桌面环境中的工作方式。

关于android - 插入具有复合主键的android sqlite3表的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4324937/

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