Android-Room 可以自动创建迁移吗?
Posted
技术标签:
【中文标题】Android-Room 可以自动创建迁移吗?【英文标题】:Can Android-Room auto-create migrations? 【发布时间】:2019-12-18 13:19:57 【问题描述】:在 android 上使用 Room for sqlite 库时,我注意到虽然数据库的第一个版本的表是自动创建的,但我只看到了有关如何通过手动编写 sql 命令迁移到新版本的教程迁移类。
这看起来真的很奇怪,因为可以自动生成这些迁移(例如 django),令人惊讶的是 V1 的创建命令是自动生成的,但是如果我稍后添加一个表,我必须手动输入命令.
那么我只是错过了它还是我真的必须编写迁移?
【问题讨论】:
This 可能会有所帮助 【参考方案1】:目前,使用 Room,您确实必须编写迁移。
【讨论】:
你知道为什么这个(恕我直言)特性没有实现吗? @FooTheBar:如果我不得不猜测,他们还没有解决这个问题。【参考方案2】:不可以,您必须编写 Room 迁移。
选中此tutorial 以编写迁移。
我注意到房间没有良好的迁移系统
【讨论】:
【参考方案3】:根据我的经验,您必须手动为 Google Room 创建迁移。也许您要迁移的原因之一是保存/处理安全保存在 SQLite 数据库中的数据。
例如,您进行破坏性迁移:
Room.databaseBuilder(context.getApplicationContext(),
UsersDatabase.class, "Sample.db")
.fallbackToDestructiveMigration()
.build();
这将尝试删除您的数据库,将重新创建您的架构,并且您的数据也将消失。
所以对于迁移来说,就像
Room.databaseBuilder(context.getApplicationContext(),
UsersDatabase.class, "Sample.db")
.addMigrations(MIGRATION_1_2)
.build();
您正在手动管理数据库迁移,并且您将对所有数据负责。例如,您向用户表添加了一个新属性/列,您必须为更改用户表创建迁移并添加默认值为 blah blah blah...的新属性...
我也给一些建议,如果你要进行迁移,请谨慎操作,否则会让你头疼,并且你的应用会产生迁移相关的崩溃。
【讨论】:
【参考方案4】:从 2.4.0 版本开始支持自动迁移
https://developer.android.com/reference/androidx/room/AutoMigration
【讨论】:
【参考方案5】:现在从房间2.4.0
支持。
目前仅提供测试版2.4.0-beta01
。我已经在我的项目中测试了它的工作正常。
// 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
【讨论】:
以上是关于Android-Room 可以自动创建迁移吗?的主要内容,如果未能解决你的问题,请参考以下文章