kotlin中room数据库的基本用法

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)
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值