Android Room 数据库之简单上手

本篇介绍Room的简单使用,不涉及数据库升级;内容包括gradle配置、依赖、数据库增删改。

一、App Gradle配置

gradle配置主要是添加room依赖

gradle.kts 复制代码
plugins {
    //org.jetbrains.kotlin.android:1.9.0
    alias(libs.plugins.kotlin.android)
    //com.google.devtools.ksp:1.9.0-1.0.13
    alias(libs.plugins.kotlin.ksp)
}

dependencies {
    val room_version = "2.6.1"
    implementation("androidx.room:room-runtime:$room_version")
    // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
    // See Add the KSP plugin to your project
    ksp("androidx.room:room-compiler:$room_version")
    // If this project only uses Java source, use the Java annotationProcessor
    // No additional plugins are necessary
    annotationProcessor("androidx.room:room-compiler:$room_version")
    // optional - Kotlin Extensions and Coroutines support for Room
    implementation("androidx.room:room-ktx:$room_version")
}

二、创建数据库实体类

一个实体类对应一个数据表,在类上加上@Entiry表示

kotlin 复制代码
@Entity
data class Wong(
    val userName: String,
    val age: Int,
    // 在数据库中0表示false,1表示true
    val isGirl: Boolean = false
) {
    //必须要指定 PrimaryKey
    @PrimaryKey(autoGenerate = true)
    var id: Long = 0
}

三、创建数据库Dao

创建增删改查工具接口类,类上加@Dao表示,在每个增删改查方法上加上对应的注解:@Insert@Delete@UpdateQuery注意Dao是个接口

kotlin 复制代码
@Dao
interface WongDao {
    @Insert
    fun insert(wong: Wong)

    @Insert
    fun insert(vararg wong: Wong)

    @Insert
    fun insert(wong: List<Wong>)

    /**
     * 返回0表示删除失败
     * 只会拿id去匹配
     */
    @Delete
    fun delete(wong: Wong): Int

    @Update
    fun update(wong: Wong)

    @Query("SELECT * FROM wong")
    fun getAll(): List<Wong>
}

四、创建数据库Database

这个类用于创建Dao和数据库升级,是个抽象类,继承自RoomDatabase,每个表Dao对应一个抽象方法; 通过Room.databaseBuilder(context, AppDatabase::class.java, "my-db").build()方法获取当前数据库对象;

kotlin 复制代码
@Database(entities = [Wong::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    //每个表对应一个抽象方法
    abstract fun wongDao(): WongDao

    companion object {
        // [这里instance是官方demo的写法](https://github.com/android/sunflower)
        @Volatile
        private var instance: AppDatabase? = null

        fun getInstance(context: Context): AppDatabase {
            return instance ?: synchronized(this) {
                instance ?: buildDatabase(context).also { instance = it }
            }
        }

        private fun buildDatabase(context: Context): AppDatabase {
            return Room.databaseBuilder(context, AppDatabase::class.java, "my-db")
                .build()
        }
    }
}
相关推荐
崔庆才丨静觅4 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60615 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了5 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅5 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅5 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅6 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment6 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅6 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊6 小时前
jwt介绍
前端
爱敲代码的小鱼6 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax