在交付到生产构建之前,我已经确保了以下几点
@database
注释行中有
exportschema=false
.fallbacktoDestructiveMigration()
.fallbacktoDestructiveMigrationonDowngrade()
.EnableMultiInstanceInvalidation()
应用程序崩溃,出现以下StackTrace。
java.lang.IllegalStateException: Room cannot verify the data integrity. Looks like you've changed schema but forgot to update the version number. You can simply fix this by increasing the version number.
Fatal Exception: java.lang.RuntimeException: Exception while computing database live data.
at androidx.room.RoomTrackingLiveData$1.run + 92(RoomTrackingLiveData.java:92)
at java.util.concurrent.ThreadPoolExecutor.runWorker + 1167(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run + 641(ThreadPoolExecutor.java:641)
at java.lang.Thread.run + 764(Thread.java:764)
Caused by java.lang.IllegalStateException: A migration from 19 to 20 was required but not found. Please provide the necessary Migration path via RoomDatabase.Builder.addMigration(Migration ...) or allow for destructive migrations via one of the RoomDatabase.Builder.fallbackToDestructiveMigration* methods.
at androidx.room.RoomOpenHelper.onUpgrade + 101(RoomOpenHelper.java:101)
at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.onUpgrade + 124(FrameworkSQLiteOpenHelper.java:124)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked + 398(SQLiteOpenHelper.java:398)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase + 298(SQLiteOpenHelper.java:298)
at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableSupportDatabase + 92(FrameworkSQLiteOpenHelper.java:92)
at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase + 53(FrameworkSQLiteOpenHelper.java:53)
at androidx.room.RoomDatabase.inTransaction + 452(RoomDatabase.java:452)
at androidx.room.RoomDatabase.assertNotSuspendingTransaction + 275(RoomDatabase.java:275)
at androidx.room.RoomDatabase.query + 304(RoomDatabase.java:304)
at androidx.room.util.DBUtil.query + 54(DBUtil.java:54)
at com.xxx.data.local.banner.BannerDao_Impl$4.call + 218(BannerDao_Impl.java:218)
at com.xxx.data.local.banner.BannerDao_Impl$4.call + 215(BannerDao_Impl.java:215)
at androidx.room.RoomTrackingLiveData$1.run + 90(RoomTrackingLiveData.java:90)
at java.util.concurrent.ThreadPoolExecutor.runWorker + 1167(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run + 641(ThreadPoolExecutor.java:641)
at java.lang.Thread.run + 764(Thread.java:764)
我用下面的方法解决了房间迁移问题。
Room.databaseBuilder(context, AppDatabase::class.java, "xxx.db")
.fallbackToDestructiveMigration()
.fallbackToDestructiveMigrationOnDowngrade()
.fallbackToDestructiveMigrationFrom(16, 17, 18, 19)
.build()
必须添加fallbacktoDestructiveMigrationFrom()
方法,该方法强制删除表并用新模式重新创建表。
因此,db版本的varargs(例如16、17、18、19
)将为方法FallbacktoDestructiveMigrationFrom(...)
的这些版本号重新创建db
我正在创建我的第一个房间SQLite迁移,我不知道我现在应该做什么,旧数据库中的版本号是2,我正在将其更改为3。当我尝试编译应用程序时,控制台中出现以下错误: 我的数据库代码如下所示: 当我在编写迁移代码时,我得到了“迁移没有正确处理”,直到我修复了所有这些,之后我开始得到数据完整性错误。 提前谢了。
我正在尝试在没有项目编写器的情况下使用下面的配置来配置spring批处理步骤。然而,我错误地说writer元素既没有'writer'属性,也没有元素。 我浏览了链接spring批处理:没有ItemWriter的Tasklet。但无法解决问题。有人能告诉我在我提到的代码片段中要做的具体更改吗
我们有一个数据库,其中有一个名为Students的表,其中包含id、name、age和school列。 现在我想编写一个迁移脚本,将3列(假设我有数百万条记录)从Students表复制到New_Students表。 下面是我编写的示例脚本。这是一个错误 当在crateDb管理UI中执行上面的命令时,我得到下面的错误 以上语句在单独执行时有效。 问题: 为什么上面的多个语句不起作用,但是当单独键入时
问题内容: 有没有办法在不使用Java代码的情况下在H2中编写函数?我的要求是在不使用Java代码的情况下将用SQL编写的函数转换为H2。我在不同的门户网站中找到了许多使用Java代码执行相同操作的示例。对你的帮助表示感谢。 问题答案: 当前,H2仅支持以Java或相关语言(例如Groovy或Scala)编写的功能。不支持PL / SQL(Oracle) 和T-SQL(MS SQL Server,
问题内容: 当我打印一个numpy数组时,我得到了一个截断的表示形式,但是我想要完整的数组。 有什么办法吗? 例子: 问题答案: 用途
自那时起,该应用程序处于开发阶段,我使用该应用程序来避免迁移。所以我已经从设备中配置了应用程序,并通过Android Studio安装(运行)。但它的给出跟随错误- Room无法验证数据完整性。看起来您已经更改了架构,但忘记更新版本号。您可以简单地通过增加版本号来解决这个问题。 在我的清单中,allowBackup设置为false,如下所示- 已编辑 我有一件事要提。我在资产文件夹中有一个sqli