Android中Room 持久性库使用

Posted bug樱樱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android中Room 持久性库使用相关的知识,希望对你有一定的参考价值。

Room

Room 持久性库在 SQLite 的基础上提供了一个抽象层,它是 android 官方推出的 ORM 框架,它屏蔽了数据库访问的细节,可以让开发者使用时更容易上手,并且能享有更安全健壮的数据库访问机制。

基本使用

1.导入Room

implementation "androidx.room:room-runtime:2.4.2"
implementation "androidx.room:room-ktx:2.4.2"
kapt "androidx.room:room-compiler:2.4.2" 

2.创建实体类

@Entity
data class Student(
    @PrimaryKey(autoGenerate = true) val uid: Int,
    @ColumnInfo(name = "real_name") val realName: String?,
    val age: Int?
) 
标题
@Entity表示数据库中的表
@PrimaryKey表示当前字段为主键,autoGenerate=true表示Room自定为实体实例分配ID
@ColumnInfo表示当前字段在数据库中的字段名

3.创建数据访问对象(DAO)

创建接口Dao——StudentDao,提供与 student 表中的数据交互的方法,Room给我们提供了很多方便的注解,可以让开发者无需关注SQL语句就完成简单的增删改查。如下

@Dao
abstract class StudentDao 
    @Insert
    abstract fun insertStudent(student: Student)

    @Update
    abstract fun updateStudent(student: Student)

    @Delete
    abstract fun deleteStudent(student: Student)

    @Query("SELECT * FROM STUDENT")
    abstract fun getAllStudent():List<Student>
 
标题
@Dao表示为访问数据库操作接口
@Insert新增,调用 @Insert 方法时,Room 会将每个传递的实体实例插入到相应的数据库表中。
@Update更新
@Delete删除指定的数据
@Query可以通过编写指定的Sql,完成从数据库中查询数据

4.创建AppDatabase用以保存数据库

AppDatabase由于实例成本很高,所以实例化的时候一般使用单例模式

@Database(entities = [Student::class], version = 1)
abstract class AppDatabase : RoomDatabase() 
    abstract fun studentDao(): StudentDao
 

5.创建数据库管理工具

object AppDataBaseHelper 
    private var dataBase: AppDataBase? = null
    fun getDB(): AppDataBase 
        if (null == dataBase) 
            throw RuntimeException("请先init database")
        
        return dataBase!!
    
    fun initDb(application: Application) 
        dataBase = Room.databaseBuilder(
            application,
            AppDataBase::class.java,
            "app_db")
            .build()
    
 

Application中调用AppDataBaseHelper.initDb(application)完成初始化,之后就可以调用AppDataBaseHelper.getDB().studentDao()获取DAO完成对Student的增删改查

6.数据库升级

在很多时候,我们的表结构并不是一开始就设计的很完善,所以在版本迭代的过程中我们可能需要用到数据库升级,如下是增加Teacher

val MIGRATION_1_2: Migration = object : Migration(1, 2) 
    override fun migrate(database: SupportSQLiteDatabase) 
        database.execSQL(
            "CREATE TABLE `Teacher` (`id` INTEGER, "
                    + "`name` TEXT, PRIMARY KEY(`id`))"
        )
    
 

先定义Migration,然后在上一步创建AppDataBase的地方添加addMigrations()方法,即

fun initDb(application: Application) 
    dataBase = Room.databaseBuilder(
        application,
        AppDataBase::class.java,
        "app_db")
        .addMigrations(MIGRATION_1_2)
        .build()
 

文末

要想成为架构师,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。

如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。

相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。

一、架构师筑基必备技能

1、深入理解Java泛型
2、注解深入浅出
3、并发编程
4、数据传输与序列化
5、Java虚拟机原理
6、高效IO
……

二、Android百大框架源码解析

1.Retrofit 2.0源码解析
2.Okhttp3源码解析
3.ButterKnife源码解析
4.MPAndroidChart 源码解析
5.Glide源码解析
6.Leakcanary 源码解析
7.Universal-lmage-Loader源码解析
8.EventBus 3.0源码解析
9.zxing源码分析
10.Picasso源码解析
11.LottieAndroid使用详解及源码解析
12.Fresco 源码分析——图片加载流程

三、Android性能优化实战解析

  • 腾讯Bugly:对字符串匹配算法的一点理解
  • 爱奇艺:安卓APP崩溃捕获方案——xCrash
  • 字节跳动:深入理解Gradle框架之一:Plugin, Extension, buildSrc
  • 百度APP技术:Android H5首屏优化实践
  • 支付宝客户端架构解析:Android 客户端启动速度优化之「垃圾回收」
  • 携程:从智行 Android 项目看组件化架构实践
  • 网易新闻构建优化:如何让你的构建速度“势如闪电”?

四、高级kotlin强化实战

1、Kotlin入门教程
2、Kotlin 实战避坑指南
3、项目实战《Kotlin Jetpack 实战》

  • 从一个膜拜大神的 Demo 开始

  • Kotlin 写 Gradle 脚本是一种什么体验?

  • Kotlin 编程的三重境界

  • Kotlin 高阶函数

  • Kotlin 泛型

  • Kotlin 扩展

  • Kotlin 委托

  • 协程“不为人知”的调试技巧

  • 图解协程:suspend

五、Android高级UI开源框架进阶解密

1.SmartRefreshLayout的使用
2.Android之PullToRefresh控件源码解析
3.Android-PullToRefresh下拉刷新库基本用法
4.LoadSir-高效易用的加载反馈页管理框架
5.Android通用LoadingView加载框架详解
6.MPAndroidChart实现LineChart(折线图)
7.hellocharts-android使用指南
8.SmartTable使用指南
9.开源项目android-uitableview介绍
10.ExcelPanel 使用指南
11.Android开源项目SlidingMenu深切解析
12.MaterialDrawer使用指南

六、NDK模块开发

1、NDK 模块开发
2、JNI 模块
3、Native 开发工具
4、Linux 编程
5、底层图片处理
6、音视频开发
7、机器学习

七、Flutter技术进阶

1、Flutter跨平台开发概述
2、Windows中Flutter开发环境搭建
3、编写你的第一个Flutter APP
4、Flutter开发环境搭建和调试
5、Dart语法篇之基础语法(一)
6、Dart语法篇之集合的使用与源码解析(二)
7、Dart语法篇之集合操作符函数与源码分析(三)

八、微信小程序开发

1、小程序概述及入门
2、小程序UI开发
3、API操作
4、购物商场项目实战……

全套视频资料:

一、面试合集

二、源码解析合集


三、开源框架合集


欢迎大家一键三连支持,若需要文中资料,直接点击文末CSDN官方认证微信卡片免费领取【保证100%免费】↓↓↓

以上是关于Android中Room 持久性库使用的主要内容,如果未能解决你的问题,请参考以下文章

SQlite 数据库 VS Room 持久性库 [关闭]

上手使用 Room Kotlin API

上手使用 Room Kotlin API

更新android Room中实体的某些特定字段

有人可以帮助我更好地理解 Room 持久性库吗?

Android Room:查询中的每个绑定变量都必须有一个匹配的方法