1、添加依赖
在build.gradle.kt中添加room数据库的依赖:
//Room
implementation("androidx.room:room-runtime:2.5.2")
annotationProcessor("androidx.room:room-compiler:2.5.2")
kapt("androidx.room:room-compiler:2.5.2")
2、准备数据库中存放数据的实体类
并且指定数据库表的表名,若表名若不指定的话则为实体类的名
@Parcelize//序列化
@Entity(tableName="picture_table")//表名
dataclassPicture(
//主键自增长
@PrimaryKey(autoGenerate=true)
valpid:Int,
varname:String,
vartime:String,
varurl:String,
varthumbnail:Bitmap
):Parcelable
3、准备和数据库进行交互的dao接口(也是数据访问的对象)
这里面包含了对数据基本的操作:增、删、改、查
@Dao
interface PictureDao {
//插入
@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insertPicture(picture: Picture)
//全部删除
@Delete
suspend fun deleteAll(picture: List<Picture>)
//删除单个
@Delete
suspend fun deletePicture(picture:Picture)
//修改数据
@Update
suspend fun updatePicture(picture: Picture)
//取出数据
@Query("select * from picture_table")
fun queryPic():LiveData<List<Picture>>
}
4、数据库的创建和后期的修改
@Database(
entities = [Picture::class],
version = 1,
exportSchema = false
)
@TypeConverters(BitmapConverter::class)
abstract class PictureDatabase:RoomDatabase() {
abstract fun pictureDao():PictureDao
//创建单例对象
companion object{
private var database:PictureDatabase? = null
fun db():PictureDatabase{
if(database != null) return database!!
synchronized(this){
if(database == null){
database = Room.databaseBuilder(
Helper.mContext.get()!!,
PictureDatabase::class.java,
"picture.db"
).build()
}
}
return database!!
}
}
}
5、数据库接口的方法的封装,后面需要这些方法的操作直接调用这个类下的方法:
class Repository {
private val dao = PictureDatabase.db().pictureDao()
suspend fun addPicture(picture: Picture) {
//插入图片
//这是一个耗时操作,放在协程中操作
dao.insertPicture(picture)
}
//加载图片
fun loadDates():LiveData<List<Picture>> {
return dao.queryPic()
}
//删除所有图片
suspend fun deleteAll(picture: List<Picture>) {
//这是一个耗时操作,放在协程中操作
dao.deleteAll(picture)
}
//删除单个图片
suspend fun deletePicture(picture: Picture) {
//这是一个耗时操作,放在协程中操作
dao.deletePicture(picture)
}
//修改图片
suspend fun updatePicture(picture: Picture) {
//这是一个耗时操作,放在协程中操作
dao.updatePicture(picture)
}
}