首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安卓机房迁移从第2-4版?

安卓机房迁移从第2-4版?
EN

Stack Overflow用户
提问于 2022-03-22 04:52:57
回答 2查看 286关注 0票数 0

我正在尝试将Room数据库从版本2和3迁移到4,如下所示:

代码语言:javascript
运行
复制
private static final Migration MIGRATION_2_4 = new Migration(2, 4) {
    @Override
    public void migrate(@NonNull @NotNull SupportSQLiteDatabase database) {

        database.execSQL(
                "ALTER TABLE 'market_data' ADD COLUMN 'watch_list_boolean' TEXT NOT NULL DEFAULT '0'");

        database.execSQL("DROP TABLE 'developer_data'");
    }
};

但它不起作用,这里有什么问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-22 05:03:15

最有可能的问题是(发布堆栈跟踪以帮助未来的读者),您的DB将无法执行2->3和3->4的迁移。

因此,只有当db从2直接升级到4时,您的代码才能工作;如果db从2升级到3或从3升级到4,则会抛出一个异常(这表示缺少什么迁移)。

最佳实践是创建单独的迁移--2到3,3到4。

空间将知道如何执行正确的迁移,并以正确的顺序执行(2->3或3->4或2->3->4):

代码语言:javascript
运行
复制
private static final Migration MIGRATION_2_3 = new Migration(2, 3) {
    @Override
    public void migrate(@NonNull @NotNull SupportSQLiteDatabase database) {
        database.execSQL(
                "ALTER TABLE 'market_data' ADD COLUMN 'watch_list_boolean' TEXT NOT NULL DEFAULT '0'");
    }
};

private static final Migration MIGRATION_3_4 = new Migration(3, 4) {
    @Override
    public void migrate(@NonNull @NotNull SupportSQLiteDatabase database) {
        database.execSQL("DROP TABLE 'developer_data'");
    }
};

不要忘记更新DB版本:)

票数 2
EN

Stack Overflow用户

发布于 2022-03-22 04:58:01

恕我直言,你采取了一种保守的态度。

由于Room数据库使用Gradle设置版本号,因此更改它非常容易。

因此,不要依赖Gradle和SQLiteDatabase的工具为您完成这项工作,而是使用内存中的数据库版本,只需使用普通SQL创建列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71567067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档