如何用特定的行更新sqlite表而不重复存在的行?

时间:2017-10-04 22:58:21

标签: android database sqlite

我有一些包含学生的表格。 该表是这些列的构建:

"CREATE TABLE IF NOT EXISTS " + STUDENTS_TABLE
                                + "(" + STUDENT_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "
                                + STUDENT_NAME + " TEXT NOT NULL, "
                                + GROUP + " TEXT NOT NULL);";

如果用户想要添加新学生,我需要更新表格。 因此,如果用户添加新学生 - 我将学生添加到代码地图,然后我用我在地图中保存的所有现有学生更新数据库。

在这种情况下,我有重复的学生..具有不同的身份但具有相同的名称和组。

我不想删除该表,然后添加每个学生。

我正在寻找其他方式。

有人可以帮助我吗?

我想只更新不在数据库中的学生。

1 个答案:

答案 0 :(得分:1)

您可以在Create Table Statement中添加Unique约束:

"CREATE TABLE IF NOT EXISTS " + STUDENTS_TABLE
                                + "(" + STUDENT_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "
                                + STUDENT_NAME + " TEXT NOT NULL, "
                                + GROUP + " TEXT NOT NULL, "
                                + CONSTRAINT name_unique UNIQUE (STUDENT_NAME, GROUP));";

现在,您将无法插入具有相同STUDENT_NAME和GROUP的条目。当然,您可能需要处理错误。

或者你也可以这样做:

INSERT INTO STUDENTS_TABLE(Field1,Field2, ...) 
SELECT value1, value2, ...
WHERE NOT EXISTS(SELECT STUDENT_NAME FROM STUDENTS_TABLE WHERE STUDENT_NAME = valueName AND GROUP = valueGroup);

" ..."以防您需要在更多字段中添加更多值。