当前位置: 首页 > 知识库问答 >
问题:

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

燕成双
2023-03-14

我在资产文件夹中有一个。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()
        }
    }
}

在这一点之后,我完全删除了我的应用程序。创建预填充的数据库版本和@database版本1。我在AndroidManifest.xml中将allowBackup设置为false。所以我的设备中没有数据库。但当我安装应用程序到设备时,我仍然面临同样的错误。这是一个多么无稽之谈的错误。我该怎么解决呢?

共有1个答案

曾奇略
2023-03-14

我在不久的过去也面临过同样的问题。我引用的是http://www.sqlite.org/lang_altertable.html

SQLite支持ALTER TABLE的有限子集。SQLite中的ALTER TABLE命令允许用户重命名表或向现有表添加新列。不能重命名colum、移除列或从表中添加或移除约束。

或者,您可以创建一个新表,并用旧表的数据填充新表。

 类似资料:
  • 我正在用Firebase和Angular5构建一个web应用程序。我想创建/加入私人房间(受密码保护)。 目前,我正处于数据库设计阶段,无法真正了解如何在不从firebase数据库中实际检索的情况下检查用户输入的正确房间密码(从而使其完全不安全)。 我应该为此使用云功能吗。或者直接用firebase就可以了,而我错过了什么?

  • 当我试图构建我的应用程序时,我遇到了以下编译错误: 持久性模块在Android设置中是独立的。 建筑格拉德尔 ext.androidXRoom=“2.1.0-alpha02” 我试着把kotlin版本,room版本,改回AndroidArch room,但没用。我还尝试了清理项目和使Android Studio的缓存失效。但它不起作用。 编辑:AppDatabase源

  • 错误:查询有问题:[SQLITE_ERROR]SQL错误或缺少数据库(没有这样的表:任务) 显示了这个错误,我怎么可能修复它? 我正在学习这个教程

  • 并且我发现了基于数据库版本4的可能场景的迁移varargs。 我的问题是,假设我使用的是db v1的Room,当我的应用程序到达db v10时,我将不得不编写多少迁移方法? 在sqlite中,我们在中获得已安装应用程序的当前db版本,我们只需通过开关大小写而不使用break语句,以便满足所有db升级。

  • 我是新来的和我试图我的得到一个从它。我试图这样做的它与这是id但问题是我不知道如何返回目标从。 这就是<代码>刀 这是Repository类

  • 我转换java代码到kotlin代码,我得到类型未解决的java类错误。 我的Java类是 已转换的Kotlin类 非常感谢。