Android-如何在kotlin的房间数据库中预填充数据(已更新)?
我在Kotlin房间(Android)中有一个这样的数据库,但我无法预填充,因为我从未进入。addCallback(CALLBACK),我该怎么做Android-如何在kotlin的房间数据库中预填充数据(已更新)?,android,sqlite,android-room,Android,Sqlite,Android Room,我在Kotlin房间(Android)中有一个这样的数据库,但我无法预填充,因为我从未进入。addCallback(CALLBACK),我该怎么做 @Database(entities = [Entry::class, Category::class], version = 2, exportSchema = false) @TypeConverters(RoomTypeConverters::class) abstract class FinDatabase : RoomDatabase()
@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\") ")
}
}
}
}
我看得出这个问题是错误的。 请将您的查询更改为:
db.execSQL("INSERT INTO CATEGORY (id, name) VALUES (1, 'TESTE')")
注:
在创建数据库时(第一次运行时),回调的onCreate()将只被调用一次。您必须卸载并重新运行该应用程序才能再次触发回调。但是,与此无关的是,不会调用方法。addCallback(callback)。。永远不要执行db。execSQL@JohnnyFagundes可以在创建数据库时(第一次运行时),回调的onCreate()将只被调用一次。你必须卸载并重新运行应用程序才能再次触发回调。好的,Badhrinath Canessane,现在我得到了它,它工作得很好。。我原以为我只玩Run应用程序是可行的,但在卸载并重新运行后,它就可行了。。感谢Mani在一个非常类似的场景中,我如何使用DAO实例,当DAO实例尝试插入数据时,我遇到了一个错误,我使用的是execSQL。。。但是我想使用dao实例。。。这是错误:由以下原因引起:java.lang.IllegalStateException:getDatabase递归调用