دیتابیس Room
چهارشنبه, ۴ فروردين ۱۴۰۰، ۱۰:۴۱ ب.ظ
این دیتابیس در واقع ابسترکت شده دیتابیس SQLite هست و سه قسمت اصلی داره:
کلاس مدل: همون الگویی که قراره توی دیتابیس ذخیره شه.
اینترفیس DAO: کوئری هایی که قراره روی دیتابیس زده بشه در اینجا تعریف میشه.
کلاس ابسترکت دیتابیس: این کلاس یک متد ابسترکت داره که خروجیش اینترفیس DAO است و از طریق فراخونی این متد میشه به کوئری مورد نظر دست یافت. (این کلاس سینگل تون بوده و خودش متد ابسترکت ذکر شده رو پیاده سازی میکنه)
سمپل کد:
کلاس مدل: (از نوع data class هست)
@Entity(tableName = "todo_table")
data class ToDo(
@PrimaryKey(autoGenerate = true)
var id: Int,
@ColumnInfo
var title: String,
@ColumnInfo
var priority: Priority,
@ColumnInfo
var description: String
)
اینترفیس DAO:
@Dao
interface ToDoDAO {
@Query("SELECT * FROM todo_table ORDER BY id ASC")
fun getAllData() : LiveData<List<ToDo>>
@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insertToDo (todo: ToDo)
}
کلاس ابسترکت دیتابیس:
@Database(entities = [ToDo::class], version = 1,exportSchema = false)
@TypeConverters(Converter::class)
abstract class ToDoDatabase : RoomDatabase(){
abstract fun todoDao() : ToDoDAO
companion object{
@Volatile
private var INSTANCE : ToDoDatabase? = null
fun getDatabaseInstance(context: Context) : ToDoDatabase{
if(INSTANCE != null)
return INSTANCE!!
synchronized(this){
INSTANCE = Room
.databaseBuilder(
context.applicationContext,
ToDoDatabase::class.java,
"todo_database"
)
.build()
return INSTANCE!!
}
}
}
}
۰۰/۰۱/۰۴