Android Room 升级数据库-增加字段
当在更新项目过程中遇到新增数据库字段,此时需同步数据库操作,更改目标类:
@Database(entities = [Bean::class], version = 1, exportSchema = false)
@TypeConverters(DateAdapters::class)
abstract class AppDatabase : RoomDatabase() {companion object {private const val TAG = "AppDatabase"private const val DATABASE_NAME = "mvvm_database"fun initialize(@ApplicationContext context: Context): AppDatabase {return Room.databaseBuilder(context, AppDatabase::class.java, DATABASE_NAME).apply {fallbackToDestructiveMigration()}.build()}}abstract fun beanDao(): BeanDao}
#1. 简单粗暴的操作:对于更新数据库操作,直接更改版本号:version (大于原来的值即可,+1即可):
@Database(entities = [Bean::class], version = 2, exportSchema = false)
⚠️ 如果没有提供足够的迁移来从当前版本移动到最新版本,Room 将清除数据库并重新创建。对于 #1,因为仅仅更新了版本号升级,所以Room会把本地的数据库清除并创建,即本地数据库的数据将会丢失,这并不是推荐的操作。
#2. 基于 #1 的更改,继续为数据库创建迁移脚本 addMigrations() ,在表级别进行适当的更改以支持同步数据库字段新增:
@Database(entities = [Bean::class], version = 2, exportSchema = false)
@TypeConverters(DateAdapters::class)
abstract class AppDatabase : RoomDatabase() {companion object {private const val DATABASE_NAME = "mvvm_database"fun initialize(@ApplicationContext context: Context): AppDatabase {return Room.databaseBuilder(context, AppDatabase::class.java, DATABASE_NAME).apply {fallbackToDestructiveMigration()addMigrations(MIGRATION_1_2)}.build()}// 如果数据库有改动,则需要更新数据库版本来同步更新数据库,以下为示例方法:private val MIGRATION_1_2 = object : Migration(1, 2) {override fun migrate(database: SupportSQLiteDatabase) {database.execSQL("ALTER TABLE Bean ADD COLUMN `deletedDate` INTEGER")database.execSQL("ALTER TABLE Bean ADD COLUMN `isDeleted` INTEGER NOT NULL DEFAULT 0")}}}abstract fun beanDao(): BeanDao}
⚠️ Room会根据提供的迁移脚本Migration来从当前版本移动到最新版本,Room 并不会清除数据库并重新创建。
ADD COLUMN还需要注意一点在非空字段的时候:
Android Room- 为表新增非空字段时报错
* 补充:如果只对当前表进行字段更新,又对本地数据没有什么要求,我们可以先删除相应的表,再创建新表:(这适用于所有的表字段更新)
private val MIGRATION_1_2 = object : Migration(1, 2) {override fun migrate(database: SupportSQLiteDatabase) {database.execSQL("DROP TABLE IF EXISTS Bean")database.execSQL("CREATE TABLE IF NOT EXISTS `Bean` (`id` INTEGER NOT NULL, `checksum` TEXT NOT NULL, `deletedDate` INTEGER, `isDeleted` INTEGER NOT NULL, PRIMARY KEY(`id`))")}}
Android Room 升级数据库-增加字段相关推荐
- android连接SQLite数据库-----增加改查+分页
SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了 ...
- 数据库增加字段加备注
alter table 表名 add (字段名 字段类型 ); COMMENT ON COLUMN 表名.字段名 IS '备注信息';
- Android基础知识 - SQLite数据库的最佳实践(使用事务、升级数据库的最佳写法)
目录 使用事务 升级数据库的最佳写法 使用事务 SQLite数据库时支持事务的,事务的特性可以保证让某一系列的操作要么全部完成,要么一个都不会完成. 那么在什么情况下才需要使用事务呢? 想象以下场景, ...
- Android入门(十二)SQLite事务、升级数据库
原文链接:http://www.orlion.ga/610/ 一.事务 SQLite支持事务,看一下Android如何使用事务:比如 Book表中的数据都已经很老了,现在准备全部废弃掉替换成新数据,可 ...
- mysql数据库制定位置_MySQL数据库在指定位置增加字段
这个本身属于MySQL的基本语法,我这里给出一个例子而已. mysql> -- 测试数据库在指定位置增加字段 mysql> drop table if exists t; Query OK ...
- android数据库升级兼容老版本吗,成功升级后Android升级数据库不更新数据库版本...
我想添加三个新表到我现有的sqlite数据库,我遇到了成功升级后不更新数据库版本的问题.下面是运行DatabaseHelper:成功升级后Android升级数据库不更新数据库版本 private st ...
- oracle删除表的一个字段的数据库,学会Oracle数据库删除表字段和Oracle数据库表增加字段方法...
Oracle数据库添加字段的语法:alter table tablename add (column datatype [default value][null/not null],-.); Ora ...
- mysql增加布尔字段_JDBC对MySQL数据库布尔字段的操作方法
本文实例讲述了JDBC对MySQL数据库布尔字段的操作方法.分享给大家供大家参考.具体分析如下: 在Mysql数据库如果要使用布尔字段,而应该设置为BIT(1)类型 此类型在Mysql中不能通过MyS ...
- oracle数据库建表、修改字段名称类型、增加字段、ID自动增长写法
oracle建表: create table INDEX_POLICY_TBL ( ID NUMBER(10) NOT NULL PRIMARY KEY, PO ...
- android dbflow教程,Android高性能ORM数据库DBFlow入门教程
一.引入依赖.初始化 需要引入apt和maven,配置项目的 build.gradle buildscript { repositories { jcenter() } dependencies { ...
最新文章
- oracle10g資料庫調效,資料庫 | 簡睿隨筆 | 學習過程的紀錄與備忘
- leetcode 35. 搜索插入位置
- mysql数据库保存中文乱码解决参考方案
- pthread-win32 semaphore信号量总结
- 全球及中国水产养殖和畜牧保险行业风险研究与“十四五”投资建议报告2021年版
- VTK:可视化之Follower
- (二)docker安装并持久化postgresql数据库
- python-字典方法
- Ts_半分查找猜数字游戏(初始版),
- 信息奥赛一本通(1120:同行列对角线的格)
- 新视角:用图像分类来建模文字识别也可以SOTA
- ubuntu安装禅道
- Vue与class和style
- 《万物互联》——1.3 什么样的物体可以接入物联网
- flume流程之http-memory-hdfs
- 翻译:响应式编程或反应式编程 RxSwift和RxCocoa 从入门到精通 Reactive programming
- 易语言怎么给手机发短信,对接验证码短信接口DEMO示例
- rtk定位权限_无人机中的GPS定位、DGPS差分定位、RTK差分定位
- 英语四级——常考语法【不断更新中】
- python 语料_用python从语料库中提取最常用的词
热门文章
- web网页设计实例作业 我的家乡- 达州(4页) HTML+CSS+JavaScript dreamweaver作业静态HTML网页设计模板
- socket程序退出后端口依然被占用问题的解决
- 系列学习 Gateway 之第 4 篇 —— 网关限流
- 机器学习十大算法!入门看这个就够了~
- 哔哩哔哩服务器在哪个文件夹,哔哩哔哩在手机哪个文件夹
- matlab 转移矩阵,matlab转移矩阵
- 计算机技术 安防 工程师考试,2020年上半年信息安全工程师考试报考指南
- 那些年,我们一起做过的KNX智能化控制经典案例!
- 【AI面试题】随机森林算法的原理、随机性、优缺点
- Linux消息队列讲解