首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >房间库的createFromAsset和fallbackToDestructiveMigration方法-不存在数据

问房间库的createFromAsset和fallbackToDestructiveMigration方法-不存在数据
EN

Stack Overflow用户
提问于 2020-11-13 21:08:00
回答 1查看 315关注 0票数 4

我在assets文件夹中有一个.db文件。我的RoomDatabase类如下所示。我将应用程序安装到我的设备上。然后,我在下面的类中更改了version = 2,并使我的预填充数据库版本2。然后,我重命名了我的表中的一列,以便更改该模式。然后我又安装了这个应用程序。然后轰隆隆!Room显示以下错误: Room无法验证数据完整性。看起来您已更改架构,但忘记更新版本号。您可以简单地通过增加版本号来修复此问题。

代码语言:javascript
复制
@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。因此我设备中不存在任何数据库。但是当我在设备上安装应用程序时,我仍然面临着同样的错误。这是一个多么荒谬的错误。我该怎么解决它呢?

EN

回答 1

Stack Overflow用户

发布于 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浏览器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64821480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档