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

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Kotlin使用Room数据库是一种常见的做法,Room是Google官方提供的一个SQLite对象映射库,用于简化与SQLite数据库的交互。以下是使用Room数据库的几个步骤: 1. 添加依赖:在项目的`build.gradle`文件添加以下依赖: ```kotlin implementation "androidx.room:room-runtime:2.4.0" kapt "androidx.room:room-compiler:2.4.0" ``` 2. 创建实体类:创建一个Kotlin类来表示数据库的表,并使用`@Entity`注解标记它。例如,如果我们要创建一个名为`User`的表,可以这样写: ```kotlin @Entity(tableName = "users") data class User( @PrimaryKey val id: Int, val name: String, val age: Int ) ``` 3. 创建DAO接口:创建一个Kotlin接口来定义访问数据库的操作,并使用`@Dao`注解标记它。例如,如果我们要创建一个名为`UserDao`的接口,可以这样写: ```kotlin @Dao interface UserDao { @Query("SELECT * FROM users") fun getAll(): List<User> @Insert fun insertAll(vararg users: User) @Delete fun delete(user: User) } ``` 4. 创建数据库:创建一个继承自`RoomDatabase`的抽象类,并在其定义数据库的实例和DAO接口的访问方法。例如,如果我们要创建一个名为`AppDatabase`的数据库类,可以这样写: ```kotlin @Database(entities = [User::class], version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao } ``` 5. 初始化数据库:在应用程序的入口处(通常是`Application`类的`onCreate()`方法),使用`Room.databaseBuilder`方法来创建数据库的实例。例如: ```kotlin val db = Room.databaseBuilder( applicationContext, AppDatabase::class.java, "database-name" ).build() ``` 6. 使用数据库:通过调用DAO接口定义的方法,可以进行数据库的增删改查操作。例如: ```kotlin val userDao = db.userDao() val allUsers = userDao.getAll() userDao.insertAll(User(1, "John Doe", 25)) val user = userDao.getAll().first() userDao.delete(user) ``` 这些是使用KotlinRoom数据库基本步骤,希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值