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

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

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

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

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

我正在寻找其他方式。

有人可以帮我吗?

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

最佳答案

您可以在创建表语句中添加一个 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);

“...”是为了防止您需要在更多字段中添加更多值。

关于android - 如何用特定行更新 sqlite 表而不重复存在的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46575408/

相关文章:

c# - DataAnnotations问题

android - 为什么我们必须为所有设备屏幕尺寸(移动开发)提供图像?

database - 具有主/从结构的 Redis Multitenency?

java - 从 OOP 设计的角度来看,通过对象传递参数的最有效实现是什么?

mysql - SQL 中的 NULL 在以下场景中如何工作?

php - 在 PHP 中准备 SQLite SQL 语句

android - getColumnIndex(_ID) 返回零,getlong(getColumnIndex(_ID)) = 正确值

android - 如何将来自两个单独表的数据合并到一个 Cursor 中?

c# - Restful wcf 服务返回 json 中的数据行 - android 客户端

android - 默认 android 布局的可见性/可访问性