Room 不会更新现有的预定义数据库

Posted

技术标签:

【中文标题】Room 不会更新现有的预定义数据库【英文标题】:Room does not update exsisting predefined database 【发布时间】:2021-10-25 01:49:02 【问题描述】:

我有一个简单的表格:

CREATE TABLE "Driver" (
"id"    INTEGER NOT NULL,
"firstName" TEXT NOT NULL,
"lastName"  TEXT NOT NULL,
"driverName"    TEXT NOT NULL UNIQUE,
"birthDate" INTEGER,
"drivingLicNum" TEXT,
"drivingLicExpDate" INTEGER,
"issuingAuthority"  TEXT,
"licCategory"   TEXT,
"isActive"  INTEGER NOT NULL DEFAULT 1 CHECK("isActive" IN (0, 1)),
"profilePic"    TEXT,
PRIMARY KEY("id" AUTOINCREMENT)
);

我使用创建数据库的代码:

Room.databaseBuilder(context, VehicleexDatabase.class, "myprefdefdb.db").fallbackToDestructiveMigration()
                .createFromAsset("databases/myprefdefdb.db").build();

问题是我一个“drivingLicNum”的唯一列,但是我认为这是不必要的,我决定从我的预定义数据库中删除该列,卸载应用程序,并使用新的预定义数据库启动新应用程序。

但是,即使我删除了 UNIQUE 语句,我仍然收到“drivingLicNum”列存在唯一约束的问题。我错过了什么吗?

【问题讨论】:

你能更具体地谈谈这个问题吗?例如包括堆栈/跟踪日志。您是否确保使用更改后的数据库更改了资产(在将 db 文件复制到资产中之前,我总是保存、关闭和重新打开几次)。 【参考方案1】:

发现问题: 我忘记在我的实体类中删除唯一索引。

【讨论】:

以上是关于Room 不会更新现有的预定义数据库的主要内容,如果未能解决你的问题,请参考以下文章

带有更新的预填充数据库的 Android Room 迁移

如何将具有自定义枚举类型的数据从 csv 插入现有的 PostgreSQL 表

在界面生成器中使用现有的自定义 UIView

当现有的过渡或演示发生时;导航堆栈不会更新

替代 Group_Concat 自定义现有的实体框架模型

现有的 UIDocument 不会在 iCloud 上更新