这篇文章介绍一个通用的app数据库版本迁移处理,偷懒采用的FMDB封装的数据库,但是操作过程的逻辑是相同的。
先介绍一下使用场景:app内嵌有本地数据库,在app版本迭代过程中由需求导致的数据库表结构变动,这里仅介绍表字段的删除和新增(sqlite不支持删除或则修改表字段)
新增字段是原本就支持的功能,语句就是“ ALTER TABLE *** add *** ;” 如下图:
删除字段就比较麻烦了,毕竟sqlite不支持直接用ALTER语句处理,不像其它的数据库,虽然如此,但还是有办法解决的,简单点的操作就是把原来的表备份一下,然后删除,再把原来的建表语句改一改执行一下,最后把备份数据还原回去,这边做的主要是这个建表语句的自动化处理。首先先采用sql语句获取表的CREATR sql代码,然后对CREATR sql进行解析转换成新的CREATR sql,剩下的都一样了,具体如下图:
ps:数据库操作时候需要避免同时读写(数据库锁)和线程死锁。
至于修改表字段的可以参照删除表字段思路进行处理,这里就不另行介绍了。