【Jetpack】Room 预填充数据 ( 安装 DB Browser for SQLite 工具 | 创建数据库文件 | 应用中设预填充数据对应的数据库文件 | 预填充数据库表字段属性必须一致 )
import androidx.room.Database
import androidx.room.RoomDatabase
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
@Database(entities = [Place::class], version = 2)
abstract class PlaceDatabase : RoomDatabase() {
abstract fun placeDao(): PlaceDao
companion object {
// 预填充数据的SQL脚本
private const val PRE_POPULATE_SQL = """
INSERT INTO Place (name, location, address, avgScore, numRatings)
VALUES ('Starbucks', 'POINT(121.03658 31.224279)', '中国上海市', 4.5, 100);
""".trimIndent()
// 创建并预填充数据库的函数
fun create(context: Context): PlaceDatabase {
val db = Room.databaseBuilder(
context.applicationContext,
PlaceDatabase::class.java, "place_database"
).addCallback(object : RoomDatabase.Callback() {
override fun onCreate(db: SupportSQLiteDatabase) {
// 执行预填充数据的SQL脚本
db.execSQL(PRE_POPULATE_SQL)
}
}).build()
return db
}
}
}
这段代码定义了一个Room数据库,并在数据库创建时通过回调的方式执行了预填充数据的操作。这是一个很好的实践,可以确保应用启动时数据库已经包含了必要的数据。
评论已关闭