首页 > 解决方案 > 预打包的数据库具有无效的架构

问题描述

这是我的实体

@Entity(tableName = "Task")
class TaskEntity {

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "ID")
    var id: Long = 0

    @ColumnInfo(name = "Title")
    lateinit var title: String
}

我将此类添加到我的数据库类实体列表中,同时尝试检查是否出现以下异常

java.lang.IllegalStateException: Pre-packaged database has an invalid schema: Task(com.idesign.iplacenotes.controller.database.room.entity.TaskEntity).
 Expected:
TableInfo{name='Task', columns={Title=Column{name='Title', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, ID=Column{name='ID', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}}, foreignKeys=[], indices=[]}
 Found:
TableInfo{name='Task', columns={}, foreignKeys=[], indices=[]}

可能是非常愚蠢的错误,但我不知道我错过了什么。

这是迁移代码,

private val MIGRATION_35_36 = object : Migration(35, 36) {
            override fun migrate(database: SupportSQLiteDatabase) {
                database.execSQL("CREATE TABLE `Task` (`ID` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `Title` TEXT NOT NULL)")
            }
        }

在这里我正在初始化我的数据库

fun getInstance(context: Context): AppDatabase {
    if (instance == null) {
        instance = Room.databaseBuilder(context, AppDatabase::class.java, DATABASE_NAME)
                .fallbackToDestructiveMigration()
                .addMigrations(MIGRATION_35_36)
                .allowMainThreadQueries()
                .build()
    }
    return instance as AppDatabase
}

标签: androidkotlinandroid-room

解决方案


推荐阅读