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()
        }
    }
}
相关推荐
月小满3 分钟前
DataV轮播时其他组件的内容也一起滚动 修复bug的方法
前端·vue.js·bug·大屏端
小莫分享24 分钟前
Github Action 一键部署HTML 静态服务
前端·html·github
星释38 分钟前
Rust 练习册 66:密码方块与文本加密
java·前端·rust
IT_陈寒1 小时前
React性能翻倍!90%开发者忽略的5个Hooks最佳实践
前端·人工智能·后端
亿元程序员1 小时前
光图片就300多M,微信小游戏给再大的分包也难啊!
前端
中工钱袋1 小时前
前端请求到底是从哪里发出去的?
前端
じòぴé南冸じょうげん4 小时前
若依框架favicon.ico缓存更新问题解决方案:本地生效但线上未更新
前端·javascript·前端框架·html
狮子座的男孩4 小时前
js基础高级:01、数据类型(typeof、instanceof、===的使用)、数据与变量与内存(定义、赋值与内存关系、引用变量赋值、js调函数传参)
前端·javascript·经验分享·数据类型·数据与变量与内存·赋值与内存关系·引用变量赋值
Cyclo-7 小时前
PDFJS 在React中的引入 使用组件打开文件流PDF
前端·react.js·pdf
椒盐螺丝钉9 小时前
Vue Router应用:组件跳转
前端·javascript·vue.js