首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android-Room可以自动创建迁移吗?

Android-Room可以自动创建迁移吗?
EN

Stack Overflow用户
提问于 2019-08-12 03:47:15
回答 5查看 2.2K关注 0票数 3

在Android上使用Room for sqlite库时,我注意到虽然数据库的第一个版本的表是自动创建的,但我只看到了如何通过手动编写Migration-classes的sql命令来迁移到较新版本的教程。

这似乎真的很奇怪,因为可以自动生成这些迁移(例如,像django),令人惊讶的是,V1的创建命令是自动生成的,但如果我稍后添加一个表,我必须手动输入命令。

那么,我只是错过了它,还是我真的必须编写迁移?

EN

回答 5

Stack Overflow用户

发布于 2019-08-12 09:51:25

根据我的经验,你必须手动为Google Room创建迁移。也许您打算迁移的原因之一是为了安全地保存/处理保存在SQLite数据库上的数据。

例如,您进行破坏性迁移:

代码语言:javascript
复制
Room.databaseBuilder(context.getApplicationContext(),
                    UsersDatabase.class, "Sample.db")
            .fallbackToDestructiveMigration()
            .build();

这将尝试删除您的数据库,将重新创建您的模式,您的数据也将消失。

所以对于迁移来说,就像

代码语言:javascript
复制
Room.databaseBuilder(context.getApplicationContext(),
    UsersDatabase.class, "Sample.db")
    .addMigrations(MIGRATION_1_2)
    .build();

您将手动管理数据库迁移,并负责所有数据。例如,您向User表添加了一个新的属性/列,您将必须创建一个迁移,即alter the user table,并添加默认值为blah blah的新属性。

我还给出了一些建议,如果你要做迁移,要小心,否则它会让你头疼,你的应用程序会产生与迁移相关的崩溃。

票数 2
EN

Stack Overflow用户

发布于 2019-08-12 04:03:48

不,它不能,你必须写房间迁移。

选中此tutorial以写入迁移。

我注意到房间没有一个好的迁移系统

票数 1
EN

Stack Overflow用户

发布于 2021-10-30 09:43:11

现在从2.4.0房间支持它。

目前测试版只有2.4.0-beta01可用。我已经在我的项目中进行了测试,它工作正常。

代码语言:javascript
复制
// Database class before the version update.
@Database(
  version = 1,
  entities = {User.class}
)
public abstract class AppDatabase extends RoomDatabase {
  ...
}

// Database class after the version update.
@Database(
  version = 2,
  entities = {User.class},
  autoMigrations = {
    @AutoMigration (from = 1, to = 2)
  }
)
public abstract class AppDatabase extends RoomDatabase {
  ...
}

请参阅doc

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

https://stackoverflow.com/questions/57453096

复制
相关文章

相似问题

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