当你和数据库打交道的时候,你需要改变数据模型(Model),但是因为Realm中的数据模型被定义为标准的Objective-C interfaces,要改变模型,就像改变其他Objective-C interface一样轻而易举。举个例子,假设有个数据模型Person:

@interface Person : RLMObject
@property NSString *firstName;
@property NSString *lastName;
@property int age;
@end
复制代码

当我们想添加一个字段fullName属性而不是first和last names时,我们可以这样做:

@interface Person : RLMObject
@property NSString *fullName;
@property int age;
@end
复制代码

接下来执行迁移:

// Inside your [AppDelegate didFinishLaunchingWithOptions:]RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
config.schemaVersion = 1;
config.migrationBlock = ^(RLMMigration *migration, uint64_t oldSchemaVersion) {//如果从没迁移过,oldSchemaVersion == 0if (oldSchemaVersion < 1) {// The enumerateObjects:block: method iterates// over every 'Person' object stored in the Realm file[migration enumerateObjects:Person.classNameblock:^(RLMObject *oldObject, RLMObject *newObject) {// 设置新增属性的值newObject[@"fullName"] = [NSString stringWithFormat:@"%@ %@",oldObject[@"firstName"],oldObject[@"lastName"]];}];}
};
[RLMRealmConfiguration setDefaultConfiguration:config];
复制代码

在迁移的过程中重命名属性名称

// Inside your [AppDelegate didFinishLaunchingWithOptions:]RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
config.schemaVersion = 1;
config.migrationBlock = ^(RLMMigration *migration, uint64_t oldSchemaVersion) {// We haven’t migrated anything yet, so oldSchemaVersion == 0if (oldSchemaVersion < 1) {// The renaming operation should be done outside of calls to `enumerateObjects:`.[migration renamePropertyForClass:Person.className oldName:@"yearsSinceBirth" newName:@"age"];}
};
[RLMRealmConfiguration setDefaultConfiguration:config];
复制代码

官方eg:

RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
config.schemaVersion = 2;
config.migrationBlock = ^(RLMMigration *migration, uint64_t oldSchemaVersion)
{// enumerateObjects:block: 遍历了存储在 Realm 文件中的每一个“Person”对象[migration enumerateObjects:Person.className block:^(RLMObject *oldObject, RLMObject *newObject) {// 只有当 Realm 数据库的架构版本为 0 的时候,才添加 “fullName” 属性if (oldSchemaVersion < 1) {newObject[@"fullName"] = [NSString stringWithFormat:@"%@ %@", oldObject[@"firstName"], oldObject[@"lastName"]];}// 只有当 Realm 数据库的架构版本为 0 或者 1 的时候,才添加“email”属性if (oldSchemaVersion < 2) {newObject[@"email"] = @"";}// 替换属性名if (oldSchemaVersion < 3) { // 重命名操作应该在调用 `enumerateObjects:` 之外完成 [migration renamePropertyForClass:Person.className oldName:@"yearsSinceBirth" newName:@"age"]; }}];
};
[RLMRealmConfiguration setDefaultConfiguration:config];
// 现在我们已经成功更新了架构版本并且提供了迁移闭包,打开旧有的 Realm 数据库会自动执行此数据迁移,然后成功进行访问
[RLMRealm defaultRealm];
复制代码

Realm数据库版本迁移相关推荐

  1. Go 语言编程 — gorm 数据库版本迁移

    目录 文章目录 目录 前言 AutoMigrate 示例 Migrator 接口(DDL 操作方法) 表操作 列操作 约束操作 索引操作 数据库版本控制 参考文档 前言 本文示例为 GORM V2.0 ...

  2. oracle 导数据报exp00058_一文看懂oracle12c数据库跨小版本迁移

    概述 简单记录一下最近做的一个测试环境迁移,主要是从12.2.0.1 跨两个小版本迁移到19c(12.2.0.3),操作系统均为centos7,下面一起来看看吧~ 一.导出测试环境数据 1. 创建路径 ...

  3. 12c创建为容器数据库_详解oracle12c数据库跨小版本迁移步骤

    概述 简单记录一下最近做的一个测试环境迁移,主要是从12.2.0.1 跨两个小版本迁移到19c(12.2.0.3),操作系统均为centos7,下面一起来看看吧~ 一.导出测试环境数据 1. 创建路径 ...

  4. dmp导入数据 oracle_一文看懂oracle12c数据库跨小版本迁移

    概述 简单记录一下最近做的一个测试环境迁移,主要是从12.2.0.1 跨两个小版本迁移到19c(12.2.0.3),操作系统均为centos7,下面一起来看看吧~ 一.导出测试环境数据 1. 创建路径 ...

  5. Realm数据库存储 使用详解

    文章目录 一 Realm 框架 概念介绍 开发辅助工具 二 Realm 使用教程 1 简单的数据操作 创建数据模型 使用RLMRealm对象保存指定模型 使用RLMRealm对象 更新指定模型 使用R ...

  6. Realm数据库使用教程(一):Realm配置和Stetho配置

    本人主要是开发android项目的,这里只对android端Realm使用进行总结. 对于Realm的优缺点,既然你要使用了,就说明你有一定的了解,在这里就不介绍了!如果需要可自行google Rea ...

  7. android realm数据库,浅谈Realm数据库及其使用

    1.Realm介绍 realm是一个跨平台移动数据库引擎,支持iOS.OS X(Objective-C和Swift)以及Android.目前还支持React Native 和 Xamarin. 201 ...

  8. Realm 数据库使用

    Table of Contents(目录) 0. 项目描述 1. Realm模型 2. Realm数据库安装 3. 创建Model 4. 实现CreateRandomDatabase函数创建初始数据库 ...

  9. python脚本迁移数据库_Python迁移MySQL数据到MongoDB脚本

    MongoDB是一个文档数据库,在存储小文件方面存在天然优势.随着业务求的变化,需要将线上MySQL数据库中的行记录,导入到MongoDB中文档记录. 一.场景:线上MySQL数据库某表迁移到Mong ...

最新文章

  1. CodeForces 114B 【STL应用】
  2. silverlight 安全性错误
  3. 通过 EXPLAIN 分析低效 SQL 的执行计划
  4. spring+springmvc+maven+mongodb
  5. html弧形列表效果,web前端入门到实战:html5网页特效-弧形菜单
  6. Android开源工具库
  7. nginx虚拟主机(基于域名虚拟主机、基于IP地址虚拟主机、基于端口虚拟主机设置)
  8. 【渝粤教育】 国家开放大学2020年春季 1009离散数学(本) 参考试题
  9. oracle function 写查询语句_五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?...
  10. CentOS7下安装JDK及IDEA
  11. DNS   案例1 案例5轮询
  12. Docker配置阿里云镜像加速
  13. 23考研——2月份计划
  14. HDOJ 5142 NPY and FFT
  15. RiskCloud-双控平台(有效分享LOPA软件篇)
  16. Concurrent 包结构介绍
  17. 机器学习 --- PCA
  18. 20210427瑞芯微RK3399在Android10下查看芯片温度
  19. 正面管教之PHP_“PHP父母帮助父母解决问题”活动
  20. 【测绘程序设计】——附合导线近似平差

热门文章

  1. java一次查询900w数据_一次SQL查询优化原理分析(900W+数据,从17s到300ms)
  2. python matplotlib 饼图标签重叠_Python绘制饼图调节字体大小、防止标签重叠解决方法...
  3. 小米max2 原生 android,小米Max 2用户类原生系统福利:第三方开发者为其适配LineageOS...
  4. php网站入门鹿泉银山,01PHP编程新手入门第一步
  5. java 装配_JAVA入门[13]-Spring装配Bean
  6. 【直播回放】60分钟了解各类图像和视频生成GAN结构
  7. 全球及中国原料药产业投资动态及未来运行前景分析报告2021-2027年
  8. how to fix error 25007 : loadlibraryshim()
  9. OMG: daily scrum six
  10. iOS 键盘遮挡输入框万能解决方案(多个输入框)