房间数据库总是一遍又一遍地创建我的数据库

Room database always creates my database over and over

在我的应用程序房间数据库是从 assets 文件夹创建的:

@Provides
@Singleton
fun provideIrregularVerbsDatabase(app: Application): IrregularVerbsDatabase =
        Room.databaseBuilder(app, IrregularVerbsDatabase::class.java, IrregularVerbsConst.DATABASE_NAME)
            .createFromAsset("database/irregular_verbs.db")
            .fallbackToDestructiveMigration()
            .build()

没关系,在运行时,如果我更改某些行的内容,将数据添加到 table 它就可以完成工作。但是如果我完全退出应用程序并再次进入,Room 将使用资产中的数据库文件再次创建我的数据库,因此所有在运行时插入的数据都会被删除。

有什么办法可以预防吗?

您可能会遇到 3 种可能的情况,您正在经历什么。

第一种情况是应用的 changes/additions 实际上并未应用。您可以使用 Android Studio 的 App Inspection 查看是否正在应用 changes/additions 来消除此问题。

  • 以下是您的代码模型。当资产数据库有 2 行(运行 和 walk)并且当 App 为 运行 时添加了两行(skip 和 climb)(即符合,在这种情况下,正在添加数据) :-

另一种可能的情况是,如果说你但是如果我完全退出应用程序并再次进入意味着你卸载应用程序然后再次进入。

  • 卸载应用程序将删除数据库,因此将从资产中重新复制。所以你会丢失所有数据更改。

第三种可能引起混淆的情况是,如果您增加版本号 IrregularVerbsConst.DATABASE_NAME 并且没有迁移代码来涵盖从旧版本到新版本的迁移(您没有添加迁移,但是您添加了有 fallbackToDestructiveMigration)。 fallbackToDestructiveMigration 基本上是说,在没有对版本号所做的更改的迁移的情况下,删除所有表并重新创建它们。因此,如果您更改版本号,您将丢失所有数据。