【问题标题】:Android - How can I prepopulating data in Room Database in kotlin (updated)?Android - 如何在 kotlin 的房间数据库中预填充数据(更新)?
【发布时间】:2020-02-06 03:05:26
【问题描述】:

我在 Room Kotlin (Android) 中有一个这样的数据库,但我无法预填充,因为从未输入 .addCallback(CALLBACK),我该怎么做?

@Database(entities = [Entry::class, Category::class], version = 2, exportSchema = false)
@TypeConverters(RoomTypeConverters::class)
abstract class FinDatabase : RoomDatabase() {

    abstract val entryDao: EntryDao

    companion object {
        @Volatile
        private var INSTANCE: FinDatabase? = null
        fun getInstance(context: Context): FinDatabase {
            synchronized(this) {
                var instance = INSTANCE
                if (instance == null) {
                    instance = Room.databaseBuilder(
                        context.applicationContext,
                        FinDatabase::class.java,
                        "database"
                    )
                        .addCallback(CALLBACK)
                        .addMigrations(MIGRATION_1_2)
                        .build()
                    INSTANCE = instance
                }
                return instance
            }
        }

        private val CALLBACK = object : RoomDatabase.Callback() {
            override fun onCreate(db: SupportSQLiteDatabase) {
                super.onCreate(db)
                db.execSQL("INSERT CATEGORY (id, name) VALUES (1, \"TESTE\") ")
            }
        }
    }
}

【问题讨论】:

    标签: android sqlite android-room


    【解决方案1】:

    我可以看到查询是错误的。 请将您的查询更改为:

    db.execSQL("INSERT INTO CATEGORY (id, name) VALUES (1, 'TESTE')")
    

    注意: CALLBACK 的 onCreate() 将只被调用一次(即)在创建数据库时(在第一次运行时)。您必须卸载并重新运行应用程序才能再次触发回调。

    【讨论】:

    • 但与此无关的是,方法 .addCallback(CALLBACK) 永远不会被调用.. 并且永远不会执行 db.execSQL
    • @JohnnyFagundes 好的。 CALLBACK 的 onCreate() 将只被调用一次(即)在创建数据库时(在第一次运行时)。您必须卸载并重新运行应用程序才能再次触发回调。
    • 好的,Badhrinath Cannessane,现在我明白了,它运行良好.. 我虽然只是在 Run App 上玩,但卸载并重新运行后就可以了..谢谢男人
    • 在一个非常相似的场景中,如何使用 DAO 实例,当 DAO 实例尝试插入数据时出现错误,我正在使用 execSQL... 但我想使用 dao实例...这是错误:引起:java.lang.IllegalStateException:递归调用getDatabase
    猜你喜欢
    • 1970-01-01
    • 2020-10-22
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多