我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android Jetpack架构组件-Room升级

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android Jetpack架构组件-Room升级

了解Room框架的使用

Android Jetpack架构组件-Room基本使用
Android Jetpack架构组件-Room数据库查询艺术
Android Jetpack架构组件-Room升级

在Android中使用任何一种数据库框架,少不了应用的迭代和数据库的升级,那么Room的该如何正确的升级?

一、Room数据库升级 第一步:增加version数据,及版本号增加
@Database(entities = [Cheese::class, User::class], version = 2, exportSchema = true)
abstract class CheeseDb : RoomDatabase() {
}
第二步:创建Room特有的Migration
      val MIGRATION_1_2: Migration = object : Migration(1, 2) {
            override fun migrate(database: SupportSQLiteDatabase) {
                database.execSQL("ALTER TABLE user ADD COLUMN birthday INTEGER NOT NULL DEFAULT 23 ")
            }
        }

Migration构造函数中,第一个参数代码需要哪个版本才升级,第二个参数,是升级到哪个版本,一般情况和version保持一致

第三步:将Migration添加到配置中,如注释1所示
instance = Room.databaseBuilder(context, CheeseDb::class.java, "onexzgj")
                    .allowMainThreadQueries()
                    .addMigrations(MIGRATION_1_2)  //注释1
                    .build()

到这里,一次完整的数据库升级即可完成

二、Room升级常见错误 1.数据库的vesion未变 ,添加了Migration的crash
Room cannot verify the data integrity. Looks like you've changed schema but forgot to update the version number. 
You can simply fix this by increasing the version number.
2.数据库的version增加,未提供Migration的crash
Caused by: java.lang.IllegalStateException: A migration from 1 to 1 was required but not found.
Please provide the necessary Migration path via RoomDatabase.Builder.addMigration(Migration ...) or 
allow for destructive migrations via one of the RoomDatabase.Builder.fallbackToDestructiveMigration* methods.
3.第二种情况的错误解决
3.1配置中添加了fallbackToDestructiveMigration()方法,如下所示
    instance = Room.databaseBuilder(context, CheeseDb::class.java, "onexzgj")
                    .allowMainThreadQueries()
                    .fallbackToDestructiveMigration()  //注释1
                    .build()

即在如上代码注释1处添加.fallbackToDestructiveMigration() ,这种方式虽然不会crash,但是数据库的数据会清空
3.2配置中添加Migration,数据库升级成功,且不会清空数据,即按照第一部分正确升级姿势

4、增加字段未设置默认值
.IllegalStateException: Migration didn't properly handle tasks(googleroom.android.com.google_room.data.Task).
     Expected:

如果在定义Migration的时候,添加的是INTEGER类型的字段,则需要设置默认值,如果不设置默认值,即会遇到如上crash

错误Migration示例代码

     val MIGRATION_1_2: Migration = object : Migration(1, 2) {
            override fun migrate(database: SupportSQLiteDatabase) {
                database.execSQL("ALTER TABLE user ADD COLUMN birthday INTEGER")
            }
        }

正确Migration的实例代码

     val MIGRATION_1_2: Migration = object : Migration(1, 2) {
            override fun migrate(database: SupportSQLiteDatabase) {
                database.execSQL("ALTER TABLE user ADD COLUMN birthday INTEGER NOT NULL DEFAULT 23 ")
            }
        }

本文示例代码已上传至Jetpack_Component


作者:OneXzgj


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android Jetpack架构组件-Room升级

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android Jetpack架构组件-Room升级

了解Room框架的使用 Android Jetpack架构组件-Room基本使用 Android Jetpack架构组件-Room数据库查询艺术 Android Jetpack架构组件-Room升级 在Android中使用任何一种数据库框架
2022-06-06

Android开发Jetpack组件Room怎么用

这篇文章主要讲解了“Android开发Jetpack组件Room怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android开发Jetpack组件Room怎么用”吧!一、简介Room
2023-06-29

Android开发Jetpack组件Room使用讲解

Room是一个数据库访问组件;对SqLite数据库做了友好的封装,使我们在编码的时候,只需要注重逻辑的部分即可,数据库就交给Room去流畅的访问即可
2022-11-13

Android Jetpack架构组件(九)WorkManager源码篇

上一篇讲解了WorkManager使用篇,本篇我们就从源码角度来分析WorkManager的工作原理。 WorkManager的原理 上一篇WorkManager使用篇讲解了如何使用WorkManager。本篇我们就按照上一篇的使用步骤来分
2022-06-06

【Jetpack】Jetpack 简介 ( 官方架构设计标准 | Jetpack 组成套件 | Jetpack架构 | Jetpack 的存在意义 | AndroidX 与 Jetpack 的关系 )

文章目录 一、Google 官方推出的架构设计标准 Jetpack二、Jetpack 组成套件三、Jetpack 架构四、Jetpack 的存在意义1、提高开发效率2、最佳架构方案3、消除样本代码4、设备系统兼容性5、改善应用性能6
2023-08-16

【Jetpack】DataBinding 架构组件 ③ ( 使用 include 导入二级界面布局 | 二级页面绑定数据模型 )

文章目录 一、使用 include 导入二级界面布局二、二级页面绑定数据模型1、将二级界面布局转为 DataBinding 布局2、在主布局中为二级界面布局传递数据模型 三、核心代码示例1、主布局2、子布局3、Java 代码4、
2023-08-17

android组件化架构怎么部署

要部署Android组件化架构,可以按照以下步骤进行:1. 创建主工程:创建一个Android项目作为主工程,用于管理整个应用的组件。可以使用Gradle作为构建工具。2. 创建组件模块:将不同的功能模块拆分成独立的组件模块,每个组件模块包
2023-10-12

android轻量级无侵入式管理数据库自动升级组件

这篇文章主要为大家介绍了android轻量级无侵入式管理数据库自动升级组件详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-28

Android开发组件化架构设计原理实例分析

今天小编给大家分享一下Android开发组件化架构设计原理实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。为什么需要组
2023-07-02

android轻量级无侵入式管理数据库自动升级组件怎么实现

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“android
2023-07-05

【Jetpack】ViewModel 架构组件 ( 视图 View 和 数据模型 Model | ViewModel 作用 | ViewModel 生命周期 | 代码示例 | 使用注意事项 )

文章目录 一、Activity 遇到的问题二、视图 View 和 数据模型 Model三、ViewModel 架构组件作用四、ViewModel 代码示例1、ViewModel 视图模型2、Activity 组件3、UI 布局文件4
2023-08-16

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录