gpt4 book ai didi

安卓房间 : How to Migrate Column Renaming?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:43:35 25 4
gpt4 key购买 nike

问题

我的应用程序崩溃是因为我没有正确处理迁移。 我正在寻找一种解决方案来迁移我表中 1 列的名称。

在我的项目中,我有一个名为“content”的房间表,其Double 属性为“archivedCount”。在最新版本的应用程序中,archivedCount 属性被重命名为 dismissCount,类型仍为 Double。

原创内容模型

@Entity(tableName = "content")
data class Content(@PrimaryKey var id: String, var archiveCount: Double) : Parcelable {...}

新内容模型

@Entity(tableName = "content")
data class Content(@PrimaryKey var id: String, var dismissCount: Double) : Parcelable {...}

尝试的解决方案

阅读 Google Developer Advocate 的解释后 Understanding migrations with Room ,我尝试了她在帖子的具有复杂架构更改的迁移部分中概述的解决方案,这需要制作原始表的副本,删除旧表,然后重命名新创建的表。

使用下面的方法,此行会出现运行时错误:database.execSQL("INSERT INTO content_new (id, dismissCount) SELECT id, archiveCount FROM users"); 因为我已经清除了我的应用程序的缓存,所以旧表不再存在。

我可以在不重新创建整个表的情况下更新单个列吗?

static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
// Create the new table
database.execSQL(
"CREATE TABLE content_new (id TEXT, dismissCount REAL, PRIMARY KEY(id))");
// Copy the data
database.execSQL("INSERT INTO content_new (id, dismissCount) SELECT id, archiveCount FROM users");
// Remove the old table
database.execSQL("DROP TABLE content");
// Change the table name to the correct one
database.execSQL("ALTER TABLE content_new RENAME TO content");
}
};

最佳答案

解决方案

感谢@TimBiegeleisen 的指导,我们发现 Android implementation of SQLite 3.19 for API 2728 尚未升级到版本 3.25 SQLite,该版本允许此功能概述StackOverflow post .

一旦 Android 升级,就可以使用这样的命令来更改表列:database.execSQL("ALTER TABLE content RENAME COLUMN archiveCount TO dismissCount")

关于安卓房间 : How to Migrate Column Renaming?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52657760/

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