首页 > 解决方案 > Android Room:获取当前数据库版本/检查是否过时

问题描述

比如说,我的应用程序中有一个精心构建的房间数据库。

我计划对数据库进行升级。但是,升级/数据迁移是巨大的,因此我想通过显示 UI 消息(例如AlertDialogorToast等​​)来告诉用户耐心等待。

但我不知道如何检查是否需要播放消息----我的意思是,我如何获取/检查他们当前的数据库版本?有没有类似RoomDatabase.getVersion(), 或RoomDatabase.isOlderVersion()/的函数RoomDatabase.isOutDated()

另一方面,我知道有Migration课。考虑到我只知道可以检查数据库版本,我打算这样做

  1. 在数据库中创建侦听器持有者。
  2. 在 UI Thread 构建数据库之前,在其中注册一个侦听器。
  3. Migration被调用时,通知监听器做事。

但是,版本升级不是很复杂吗?有更好的主意吗?

标签: javaandroidandroid-room

解决方案


首先,我建议您在后台线程中隐藏所有迁移。如果应用程序生命周期中对数据库的首次访问将在后台执行,则无论如何都可能会这样做。

其次,如果您有任何 UI 线程使用数据库,请尝试更改应用程序的逻辑,将对数据库的访问置于后台。

如果您仍然需要检查当前正在运行的数据库的版本,您可以从这里获得它:

database.openHelper.writableDatabase.version

或者

database.openHelper.readableDatabase.version

数据库是您之前使用构建器创建的数据库的实例。

顺便说一句,您如何创建实例?

我的问题可能是关于流程的自动化。

至于我,我在 Dagger2 中创建了一个数据库实例。我有调用生成器的提供程序方法。我在那里添加迁移。另外,如果现有数据库的版本和新数据库的版本(更新后)不同,构建器会执行我提供的迁移。

如果您手动执行所有这些操作,我希望您不要忘记任何事情。

升级版:

如果您想在不打开数据库的情况下知道版本,我会建议最简单的方法。将数据库版本存储在Shared Preference. 在构建数据库实例之前获取它,并在开始迁移之前执行您想要执行的任何操作。


推荐阅读