三個類搞定數(shù)據(jù)操作 @Database、@Entity、@Dao
添加依賴
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-android-extensions'
id 'kotlin-kapt'
}
def roomVersion = "2.3.0"
implementation("androidx.room:room-runtime:$roomVersion")
annotationProcessor("androidx.room:room-compiler:$roomVersion")
kapt("androidx.room:room-compiler:$roomVersion")
創(chuàng)建實體類 用@Entity注解
@Entity
class Student() {
//主鍵,自動增長
@PrimaryKey(autoGenerate = true)
var id: Int = 0
@ColumnInfo(name = "name")//可以加別名,優(yōu)先級更高,如果加了就是用別名的名稱
lateinit var name: String
@ColumnInfo(name = "age")
var age: Int = 0
constructor(name: String,age: Int): this(){
this.name = name
this.age = age
}
}
創(chuàng)建訪問數(shù)據(jù)庫的接口類 使用@Dao注解
@Dao
interface StudentDao {
//vararg 可變參數(shù)
//void a(Student... args) vs vararg students: Student
@Insert
fun insertStudents(vararg students: Student)
@Update
fun updateStudents(vararg students: Student)
//刪除全部
@Query("DELETE FROM student")
fun deleteAllStudents()
//刪除
@Delete
fun deleteStudents(vararg students: Student)
@Query("SELECT * FROM student ORDER BY ID DESC")
fun queryAllStudents(): List<Student>
}
數(shù)據(jù)庫 增刪改查操作,使用@Database注解
@Database(entities = [Student::class], version = 1)
abstract class StudentDatabase: RoomDatabase() {
abstract fun getStudentDao() : StudentDao
companion object{
private var INSTANCE : StudentDatabase? = null
// Application 這個函數(shù)給Application 用
fun getDatabase(context: Context): StudentDatabase?{
if(INSTANCE == null){
INSTANCE = Room.databaseBuilder(context,StudentDatabase::class.java,"student_database.db")
.allowMainThreadQueries()//允許在主線程運行
.build()
}
return INSTANCE
}
//項目中使用這個方法
fun getDatabase(): StudentDatabase? = INSTANCE
}
}