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

Posted

技术标签:

【中文标题】如何使用特定行更新 sqlite 表而不重复存在的行?【英文标题】:how to update sqlite table with specific row and not repeat the exist row ? 【发布时间】:2017-10-04 22:58:20 【问题描述】:

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

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

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

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

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

我正在寻找其他方式。

有人可以帮我吗?

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

【问题讨论】:

在表上添加 UNIQUE 约束是否满足您的要求? 如果我知道该怎么做.. 所以也许:-) 【参考方案1】:

您可以在 Create Table 语句中添加唯一约束:

"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);

“...”是为了以防您需要将更多值添加到更多字段中。

【讨论】:

以上是关于如何使用特定行更新 sqlite 表而不重复存在的行?的主要内容,如果未能解决你的问题,请参考以下文章

删除多表而不加入

从 dest_table 插入 src_ 表而不重复

将数据从 Excel 文件导入 SQL 表而不重复?

Android中的SQLite如何更新特定行

Datagridview 更新到多个表而不使用 bindingsource 或 tableadapter

将多行插入多个表而不重复“INSERT INTO”