這篇文章介紹一個通用的app數(shù)據(jù)庫版本遷移處理,偷懶采用的FMDB封裝的數(shù)據(jù)庫,但是操作過程的邏輯是相同的。
先介紹一下使用場景:app內(nèi)嵌有本地數(shù)據(jù)庫,在app版本迭代過程中由需求導致的數(shù)據(jù)庫表結(jié)構(gòu)變動,這里僅介紹表字段的刪除和新增(sqlite不支持刪除或則修改表字段)
新增字段是原本就支持的功能,語句就是“ ALTER TABLE *** add *** ;” 如下圖:

新增表字段
刪除字段就比較麻煩了,畢竟sqlite不支持直接用ALTER語句處理,不像其它的數(shù)據(jù)庫,雖然如此,但還是有辦法解決的,簡單點的操作就是把原來的表備份一下,然后刪除,再把原來的建表語句改一改執(zhí)行一下,最后把備份數(shù)據(jù)還原回去,這邊做的主要是這個建表語句的自動化處理。首先先采用sql語句獲取表的CREATR sql代碼,然后對CREATR sql進行解析轉(zhuǎn)換成新的CREATR sql,剩下的都一樣了,具體如下圖:

刪除表字段
ps:數(shù)據(jù)庫操作時候需要避免同時讀寫(數(shù)據(jù)庫鎖)和線程死鎖。
至于修改表字段的可以參照刪除表字段思路進行處理,這里就不另行介紹了。