JetPack之Room数据库基本使用与数据库升级

  • 为什么要使用Room数据库
  • Room数据库的基本使用
  • Room数据库的升级

简介

Android Jetpack自从成为谷歌官方架构之后,Room数据库逐渐替代了SQLite,GreenDao成为最主流的数据库ORM框架。Room数据不仅简化了SQLlite数据库的使用门槛,还可以结合LiveData使用。

Room是SQLite数据库的抽象。

Room数据库主要包括三个角色

  1. Entity :表示数据库中的表
  2. Dao:提供数据库增,删,改,查的方法。
  3. DataBase:数据持久化存储底层链接的访问入口。

基本使用

  1. 数据表

定义一张表名为student_table的数据表,使用@Entity注解。主键使用@PrimaryKey修饰,autoGenerate 是否自增。使用@ColumnInfo注解定义字段名,如果不使用注解则默认为实体类的字段名。注意:如果我们在实体类中定义的字段不想存入表中,我们可以使用@Ignore注解修饰该字段。

  1. 数据库访问对象Dao

Room数据库使用了APT技术,我们只需要定义接口或抽象类,使用@Dao注解修饰,编译器会自动生成实现类。

我们定义了增,删,改,查的四个方法。其中查询使用了SQL语句,开发者可根据不同的查询条件进行数据筛选。

  1. 数据库类

定义StudentDataBase抽象类并使用@Database注解修饰,指定数据表entity以及版本号等信息。

  1. ViewModel中的增删改查操作。
  1. 操作结果

数据库迁移

当在表中新增加一个列字段 height。为了兼容旧版本数据库,需要数据库增量迁移。

  1. 使用fallbackToDestructiveMigration() 强制迁移,可能会导致数据丢失。
  1. 手动迁移。(自动迁移有风险,不推荐使用,本文暂不介绍)

如果迁移数据结构比较复杂,推荐使用手动迁移,使用自定义Migration类来实现。

相关推荐
2501_932750262 小时前
Android BottomNavigationView 入门介绍
android
Godikov4 小时前
硬件异步事件下的业务一致性:智能柜领取/归还流程的竞态设计
android
Godikov4 小时前
不用 Netty:Android 手写 TCP 客户端实战——自定义协议帧、粘包处理与可靠重连
android
事圆则缓4 小时前
Java 面向对象如何落到 Android View 体系
android
iPad协议个微协议5 小时前
# 微信自动营销系统如何基于 WechatApi 做事件驱动设计
android·微信·企业微信·个人开发·wechatapi·微信个人号开发
AirDroid_cn5 小时前
隐私沙盒:第三方应用读取剪切板内容如何拦截?
android·gitee
2501_915918417 小时前
怎么把 Python 写的 Flet 应用打包成 iOS App 并上架 App Store?
android·ios·小程序·https·uni-app·iphone·webview
邪修king9 小时前
Re:Linux系统篇(二十六):文件系统(二):Ext 文件系统底层详解:从 inode、块组到软硬链接,结合 Windows 讲透文件管理本质
android·java·linux
又见情义9 小时前
RK3568 Android 13 版本号管理实战:基于 ROCKCHIP_BUILD_NUMBER 的定制化方案
android
终端安全笔记9 小时前
iOS 27 强制 TLS 1.2:租赁设备的注册链路会在哪一环断
android·网络·安全·ios·智能手机