1、定义一个抽象类继承RoomDatabase
abstract class FavDishRoomDatabase : RoomDatabase() {
}
2、添加注解@Database,参数entities为定义表的内容时的类,version为数据库版本号,当更新数据库时可以改变版本号
@Database(entities = [FavDish::class],version = 1)
3、单例获取database
companion object{
@Volatile
private var INSTANCE : FavDishRoomDatabase ?= null
fun getDatabase(context: Context): FavDishRoomDatabase {
// if the INSTANCE is not null, then return it,
// if it is, then create the database
return INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
FavDishRoomDatabase::class.java,
"fav_dish_database"
).build()
INSTANCE = instance
// return instance
instance
}
}
}
4、database有一个抽象方法,说明所有的子类都必须实现该方法
abstract fun favDishDao() : FavDishDao
注:
1、官方文档:
Android Room with a View - Kotlin | Android Developers
2、自定义的database必须是抽象类,并继承RoomDatabase
3、代码:
package com.example.mykotlin1.model.database
import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import com.example.mykotlin1.model.entities.FavDish
@Database(entities = [FavDish::class],version = 1)
abstract class FavDishRoomDatabase : RoomDatabase() {
abstract fun favDishDao() : FavDishDao
companion object{
@Volatile
private var INSTANCE : FavDishRoomDatabase ?= null
fun getDatabase(context: Context): FavDishRoomDatabase {
// if the INSTANCE is not null, then return it,
// if it is, then create the database
return INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
FavDishRoomDatabase::class.java,
"fav_dish_database"
).build()
INSTANCE = instance
// return instance
instance
}
}
}
}