【问题标题】:Android Room - auto increment @database version number?Android Room - 自动增加@database 版本号?
【发布时间】:2018-02-15 04:02:35
【问题描述】:

在开发过程中,我的 Room db 架构非常不稳定。每次我对架构进行任何更改时,我都需要更新我的版本号,就像这样;

@Database(version = 27,
    entities = {MyClass.class})

public abstract class MyDatabase extends RoomDatabase

我也在使用 fallbackToDestructiveMigration;

Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, SystemStrings.ROOM_DATABASE_NAME)
                // allow queries on the main thread.
                // Don't do this on a real app! 
                .allowMainThreadQueries()
                .fallbackToDestructiveMigration()
                .build();

有什么方法可以避免为每个“小”更改更新版本号?正如我所说,现在情况非常不稳定。

【问题讨论】:

  • 您可以卸载应用程序或清除应用程序的数据。
  • 我可以以编程方式进行吗?做这些事情中的任何一个都比简单地更新构建之间的版本号要多。顺便说一句,我正在使用虚拟设备 (AVD) 进行调试。
  • 是的,您可以使用 context.deleteDatabase(database_name) 以编程方式删除数据库(其中 context 和 database_name 分别替换)
  • 为什么要增加版本号?保持不变,每次你都会有一个新的空数据库
  • 因为如果架构更改并且您不更改版本号,您会收到此异常“房间无法验证数据完整性。看起来您已更改架构但忘记更新版本号。您可以通过增加版本号来解决这个问题”

标签: android android-room


【解决方案1】:

删除数据库将导致每次运行应用程序时都会对其进行初始化/构建。

你可以这样做:-

context.getApplicationContext().deleteDatabase(SystemStrings.ROOM_DATABASE_NAME); //<<<< ADDED before building Database.
//Your existing code follows 
Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, SystemStrings.ROOM_DATABASE_NAME)
                // allow queries on the main thread.
                // Don't do this on a real app! 
                .allowMainThreadQueries()
                .fallbackToDestructiveMigration()
                .build();

当然你不会在真正的应用中拥有这个

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 2011-08-21
    • 2011-03-06
    • 1970-01-01
    相关资源
    最近更新 更多