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()
        }
    }
}
相关推荐
oil欧哟几秒前
我做了一个 Vibe Coding 术语学习站:VibeHub
前端·ai·agent·独立开发·vibe coding
审小匠OpenCPAi1 小时前
银行流水核查怎么自动化?单边匹配、双向勾稽与图聚类异常检测的工程对比
java·前端·人工智能·python·审计
Hrain-AI1 小时前
2026 企业 AI 编程智能体实战:Codex 与 Claude Code
开发语言·人工智能·kotlin
Revolution611 小时前
一个公共表格组件,是怎么一步步失控的
前端·前端工程化
腻害兔1 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:CRM 客户关系模块深度解析——从线索到回款,一套完整的 B2B 销售闭环是怎么搭的?
java·前端·javascript·vue.js·产品经理·ai编程
whyfail1 小时前
前端学 Spring Boot(2):一次点击,如何穿过整个后端?
前端·spring boot·后端
AI多Agent协作实战派2 小时前
AI多Agent协作系统实战(二十三):Agent读HEARTBEAT.md不读AGENTS.md——openclaw的文件加载之谜
前端·数据库·人工智能·uni-app
2601_955760073 小时前
如何用 Claude Opus 5 API 批量扩展长尾关键词和文章选题
前端·python·搜索引擎
KaMeidebaby3 小时前
卡梅德生物技术快报|bli亲和力检测gst:告别批量跑胶:BLI实时酶切监测技术加速GST融合蛋白下游流程优化
前端·网络·数据库·人工智能·算法
触底反弹3 小时前
🚀 删了数据刷新又回来?3 组件 × 4 回调 × 3 坑讲透 React 父子通信
前端·javascript·react.js