房间持久库重置版本为1。

9

有没有办法将房间图书馆版本重置为1?我尝试在手机上卸载应用程序,但这并不起作用。

4个回答

7
使用 Room 进行版本降级只有在完全卸载应用程序后才能起作用。
您可以通过 adb(adb uninstall your.app.package)进行卸载,这也会删除您的数据库,或者使用设备中的应用程序概览中的数据/缓存来删除它们。请注意保留 html 标记。

6

如果您不在意数据丢失,实际上有一种更快的方式。但是我想从这个角度来看,以上选项并不更好。

当您构建数据库时,必须像以下示例中设置 .fallbackToDestructiveMigration()

database = Room
    .databaseBuilder(getApplicationContext(), ActionsDatabase.class, "database.db")
    .allowMainThreadQueries()
    .fallbackToDestructiveMigration()
    .build();

每次更改数据库版本时,都会重新构建数据库。如果需要,您还可以在版本号之间来回切换,例如从1切换到2再切换回1。

这是一个不错的解决方案,但值得注意的是(再次强调),在生产环境中执行此操作时应非常谨慎。添加.fallbackToDestructiveMigration()将在用户更新应用程序时清除他们的本地数据库,而不仅仅是你的数据库。如果您已经拥有一个成熟的用户群体,最好考虑一种适当的迁移策略。 - M.Ed

3
我找到了重置Room数据库版本为1的简单解决方案。
在我的应用程序中,我会有一个Test.db sqlite文件,最初使用SQL ite浏览器创建。
当我需要将Room数据库重置为版本1时,我将在SQL ite浏览器中创建一个新的数据库(Test.db)文件,并进行所有必要的更改。然后将数据库文件粘贴到Asset文件夹中,将版本保持为1。
这对我起作用了。

0

感谢 @wschopohl

我的问题已经解决,按照您的方法操作。我已经成功将 Room 数据库版本回退到 1。

所以,将版本回退到 1 的简单方法是在构建数据库时添加行方法 .fallbackToDestructiveMigration()。 然后,您可以将版本升级到“n”,再回退到 1,例如从 1 升级到 2,再回退到 1。

像这样:

database = Room
   .databaseBuilder(getApplicationContext(), ActionsDatabase.class, "database.db")
    .allowMainThreadQueries()
    .fallbackToDestructiveMigration()
    .build();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接