我在assets文件夹中有一个.db文件。我的RoomDatabase类如下所示。我将应用程序安装到我的设备上。然后,我在下面的类中更改了version = 2,并使我的预填充数据库版本2。然后,我重命名了我的表中的一列,以便更改该模式。然后我又安装了这个应用程序。然后轰隆隆!Room显示以下错误: Room无法验证数据完整性。看起来您已更改架构,但忘记更新版本号。您可以简单地通过增加版本号来修复此问题。
@Database(entities = [Word::class], version = 1, exportSchema = false)
abstract class WordRoomDatabase : RoomDatabase() {
abstract fun wordDao(): WordDao
companion object {
@Volatile
private var INSTANCE: WordRoomDatabase? = null
fun getDatabase(context: Context): WordRoomDatabase =
INSTANCE ?: synchronized(this) {
INSTANCE ?: buildDatabase(context).also { INSTANCE = it }
}
private fun buildDatabase(ctx: Context): WordRoomDatabase {
val passphrase: ByteArray = SQLiteDatabase.getBytes("my password".toCharArray())
val factory = SupportFactory(passphrase)
return Room.databaseBuilder(ctx.applicationContext, WordRoomDatabase::class.java, "word_database2.db")
.openHelperFactory(factory)
.createFromAsset("word_database.db")
.fallbackToDestructiveMigration()
.build()
}
}
}在这之后,我完全删除了我的应用。设置预填充的数据库版本和@数据库版本1。我在AndroidManifest.xml中将allowBackup设置为false。因此我设备中不存在任何数据库。但是当我在设备上安装应用程序时,我仍然面临着同样的错误。这是一个多么荒谬的错误。我该怎么解决它呢?
发布于 2020-11-18 18:10:04
在不久的过去,我也遇到过同样的问题。我引用了http://www.sqlite.org/lang_altertable.html的话
SQLite支持ALTER TABLE的有限子集。SQLite中的ALTER table命令允许用户重命名表或向现有表中添加新列。不能重命名列、删除列,也不能在表中添加或删除约束。
或者,您也可以创建一个新表,然后用旧表的数据填充新表。
最后,也是最重要的一点,我想说的是,如果你想改变assets文件夹中存在的.db文件的模式,那么你应该使用sqlite命令行。当我尝试使用sqlite db浏览器来改变模式时,它并不像你所说的那样工作。sqlite db浏览器中存在更改架构的问题。
因此,如果您想更改模式,请在命令行中执行此操作。
提高代码和.db中.pragma版本(您可以使用sqlite的db浏览器来提高.pragma )。
用于添加删除添加数据而不更改架构用途的,您可以安全地继续使用sqlite db浏览器。
https://stackoverflow.com/questions/64821480
复制相似问题