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()
        }
    }
}
相关推荐
He少年16 小时前
【基础知识、Skill、Rules和MCP案例介绍】
java·前端·python
史迪仔011216 小时前
[QML] QML IMage图像处理
开发语言·前端·javascript·c++·qt
AwesomeCPA17 小时前
Miaoduo MCP 使用指南(VDI内网环境)
前端·ui·ai编程
前端大波17 小时前
前端面试通关包(2026版,完整版)
前端·面试·职场和发展
qq_4335021817 小时前
Codex cli 飞书文档创建进阶实用命令 + Skill 创建&使用 小白完整教程
java·前端·飞书
IT_陈寒17 小时前
为什么我的Vite热更新老是重新加载整个页面?
前端·人工智能·后端
一袋米扛几楼9817 小时前
【网络安全】SIEM -Security Information and Event Management 工具是什么?
前端·安全·web安全
小陈工18 小时前
2026年4月7日技术资讯洞察:下一代数据库融合、AI基础设施竞赛与异步编程实战
开发语言·前端·数据库·人工智能·python
Cobyte18 小时前
3.响应式系统基础:从发布订阅模式的角度理解 Vue2 的数据响应式原理
前端·javascript·vue.js