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 持久性库使用的主要内容,如果未能解决你的问题,请参考以下文章