gpt4 book ai didi

android - Room 库的 createFromAsset 和 fallbackToDestructiveMigration 方法 - 不存在数据

转载 作者:行者123 更新时间:2023-12-04 23:50:51 28 4
gpt4 key购买 nike

我在 Assets 文件夹中有一个 .db 文件。我的 RoomDatabase 类如下。我将应用程序安装到我的设备上。然后我在下面的类中更改了 version = 2,并使我的预填充数据库版本为 2。然后我重命名了表中的一列,以便更改架构。然后我再次安装了该应用程序。和繁荣!房间给了我以下错误:
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()
}
}
}
在此之后,我完全删除了我的应用程序。制作预填充的数据库版本和@Database 版本 1。我在 AndroidManifest.xml 中将 allowBackup 设为 false。所以我的设备中不存在数据库。但是当我将应用程序安装到设备时,我仍然面临同样的错误。这是什么胡说八道的错误。我该如何解决?

最佳答案

我在不久的过去遇到了同样的问题。我引用 http://www.sqlite.org/lang_altertable.html

SQLite supports a limited subset of ALTER TABLE. The ALTER TABLE command in SQLite allows the user to rename a table or to add a new column to an existing table. It is not possible to rename a colum, remove a column, or add or remove constraints from a table.


或者,您可以创建一个新表并用旧表的数据填充新表。
我想说的最后一点也是最重要的一点是 如果您想更改 Assets 文件夹中存在的 .db 文件的架构,那么您应该使用 sqlite 命令行来执行此操作。 当我尝试使用 sqlite db 浏览器更改架构时,它不像你说的那样工作。 sqlite db 浏览器中存在用于更改架构的问题。
因此,如果您想更改架构,请在 sqlite 命令行中进行。
在代码和 .db 中增加 .pragma 版本(您可以使用 db browser for sqlite 增加 .pragma)。
为了在不更改架构的情况下添加删除添加数据,您可以安全地继续使用 sqlite db 浏览器。

关于android - Room 库的 createFromAsset 和 fallbackToDestructiveMigration 方法 - 不存在数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64821480/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com