iOS中使用FMDB结合FMDBMigrationManager搭建数据库迁移方案,解决版本迭代过程中数据库迁移的问题

前段时间公司项目在版本迭代比较频繁,而且数据库要添加新的字段,发现新增字段没法直接通过sql语句的方式直接插入到数据库中,现有的项目中没有完善可靠的数据库迁移方案,搜了一些资料,发现FMDBMigrationManager配合FMDB使用,可完成数据库的搭建和迁移工作,分享一下使用心得。

使用前提  :   项目中的数据库需要使用FMDB搭建, FMDBMigrationManager才能配合实现数据库的迁移操作。

使用步骤:

一、创建数据库:

考虑多线程的话,可直接创建FMDatabaseQueue的实例对象;不考虑多线程可直接创建FMDatabase对数据库直接操作,这里我直接使用多线程创建数据库和对应的数据表:

                                                                                            创建数据库和迁移逻辑

注:第一次创建数据库时,根据自己业务创建对应的数据库表跟字段即可,迁移逻辑可不写;在后续的版本迭代中,如数据库表有字段变更,即可添加数据库迁移逻辑。即初次创建数据库只执行上诉代码1、2步即可,3、4步迁移逻辑后面需要再添加。

                                                                                              创建数据库

                                                                                          创建Student表

                                                                                             插入表数据

这里浏览数据库表的软件我使用的是Navicat Premium,很好用的一款软件,能直接在软件内编写SQL语句。

打开对应的表结构:

 

二、说明下创建迁移逻辑的步骤及注意事项:

1、首先创建迁移类ZTCMigration, 并遵守FMDBMigrating协议

                                                                                              ZTCMigration.h

                                                                                              ZTCMigration.m

.m中最后一个方法为实现FMDBMigrating协议方法,使用在下面讲到

2、迁移类写好后,可以开始梳理迁移逻辑

例如:在项目下个版本的需求中要给数据库表添加email, score字段

                                                                                                        迁移逻辑

说明:

a、首先创建FMDBMigrationManager实例对象,用来管理每个版本数据库的变更;

b、每个版本中,如果数据库有变更,都要创建ZTCMigration实例对象,调用初始化方法,传入对应的描述、版本号、数据库变更需要操作的SQL语句,这里可以是多个,即传入数组;

c、下面语句会在本地数据库生成迁移版本hash表,每次数据库变更,此表都会添加一条记录,记录每次变更的版本号。如果本地没有,上述语句会创建;

                                                                                                       创建迁移表

d、最关键的一句是执行这一步操作:

        resultState = [manager migrateDatabaseToVersion:UINT64_MAX progress:nil error:&error];

这步会调用FMDBMigrationManager实例对象的方法,走到方法内部:

这里会通过每次数据库变更添加的版本号,找到对应的migration对象,调用它内部实现的FMDBMigrating协议方法,如下所示:

在这里逐个执行本次变更的数据库语句,即完成本次版本对数据库的操作。

3、针对今天加的字段插入匹配的数据

                                                                                                    插入新增表字段数据

用Navicat Premium再次打开本地数据表

新增表字段已插入表中并填充了表数据。

对于版本迭代过程中,其他的针对数据库表的操作也同样适用,这里只用添加表字段的操作说明下迁移方案的使用及原理。

以上是数据库的迁移逻辑。

希望这次的分享能够帮其他人解决类似的问题。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值