FMDB 二次封裝工具類,讓你快速學會封裝,整合資料庫

發表於2016-09-29

上個版本為了增加使用者體驗,部分頁面整合了離線快取資料功能,於是就在專案裡使用了資料庫管理離線資料。下面交大家一步步學會使用FMDB,以及FMDB的二次封裝,同事把我二次封裝的資料庫放出來,希望能夠幫助大家快速學習,整合資料庫功能吧。

一.首先看一下STDB檔案結構

111663049-868ce53984124dc3

STDB檔案結構
  • Table.h主要放一些Table的建立語句, 方便管理我的資料庫各張表建立
  • DBDefine.h主要放一些表名的巨集定義,資料庫版本號,資料庫名字等等,方便我們在使用資料庫過程中更直觀管理版本和各種表
  • STDBTool.h,STDBTool.m具體封裝實現程式碼

121

Table.h結構

二.具體實現功能

1 . STDBTool.h 標頭檔案看一下

131663049-825be799eb6cef34

STDBTool.h

我定義了三個FMDatabaseQueue 因為實際操作中我需要資料庫巢狀,如果只使用一個FMDatabaseQueue 將會陷入死迴圈,下面看一下1FMDatabaseQueue原始碼分析一下原因:

143

FMDatabaseQueue 全域性變數

建立一個佇列_queue = dispatch_queue_create([[NSString stringWithFormat:@"fmdb.%@", self] UTF8String], NULL);預設是序列佇列,資料庫操作的時候FMDB原始碼如下圖

154

FMDatabaseQueue 同步執行原始碼

同步執行序列佇列 block塊裡按著順序執行。

166

demo0

任務1執行 ——>任務二等待任務一執行完畢執行,任務一等待任務二執行完畢執行,死鎖。 如果新建一個序列佇列

177

demo1

這樣就沒有問題。 至於同步非同步並行序列網上也有很多,不在一一介紹啦。

2 . STDBTool的初始化 ,很顯然 STDBTool用的是單例啦, 看一下alloc方法

181663049-1f41087343bbe00e

STDBTool 初始化

這裡面也就是建立一下資料庫檔案,設定資料庫版本號。
當資料庫有新表需要增加時,我們需要改變資料庫版本號,對資料庫進行升級。

  • .查詢資料庫當前版本

  • 與巨集定義資料庫版本不一致 需要更新 設定 資料庫版本號

    STDBTool初始化就這些吧。也沒什麼難點,主要是跟大家一起回顧一下。
    3 .實現的資料庫資料操作功能

    一般資料庫操作無非是增刪改查這些基本操作,當然我的封裝也是基於實現這些功能的。但是根據具體情況我們需要進行封裝。

  • 執行單個sql語句時候,不需要使用事務處理,我們需要知道操作型別,這裡我寫了個列舉type 便於區分

  • 根據查詢結果 確定是更新還是新增操作,只需要知道是否操作成功,不關心結果集 只處理一個查詢更新,不需要事務處理

注:sql語句陣列,sqlList[0]查詢select語句 sqList[1] update更新語句 sqlList[2] insert into 插入語句

  1. 根據查詢結果 確定是更新還是新增操作,只需要知道是否操作成功,不關心結果集 只處理一個查詢更新,不需要事務處理

    注: sql語句陣列,sqlList[0]查詢select語句 sqList1update更新語句 sqlList2 insert into 插入語句

4 . sqlList 是一個二維陣列,每一個成員包含三個sql語句,分別是查詢,更新,插入,並且根據查詢結果返回是執行更新 還是 插入操作。使用dbQueue2 用於直接呼叫。批量處理,使用事務。

注:sql語句陣列,sqlArr[i][0]:查詢語句;sqlArri:update語句;sqlArri:insert into語句

5.sql語句陣列中每個成員有2條語句,第一條是select語句,第二條是insert into語句,根據第一個sql的執行結果確定第二條語句是否執行。根據查詢結果確定是否新增,批量處理,使用事務處理,不需要返回記錄集使用dbQueue2,用於程式中直接呼叫(非封裝在其他方法中)

注:sql語句陣列,sqlArr[i][0]:查詢語句;sqlArri:insert into語句
6.批量處理更新或者新增sql語句,不需要返回記錄集 無事務處理

注: sql語句陣列update或者insert into語句

7.批量處理更新或者新增sql語句,並且不需要返回記錄集,使用事務處理

注:sql語句陣列update或者insert into語句

還有幾個方法在防止死迴圈巢狀 類似的函式。
github地址可以直接下載使用,感覺有用的話star一下,謝謝大家。希望能幫到大家。

相關文章