前言:
不知道大家平時在iOS中需要檢視資料庫內容的時候是否有困擾,以前做法都是把資料庫檔案匯出到電腦上,然後通過mac上的資料庫視覺化軟體開啟檢視裡面的資料。一來一回挺折騰的,不滿於這種浪費時間效率低下的方式,所以想著要是能夠直接在手機上或者模擬器上檢視資料庫多好,直接運算元據庫多好,可以大大節省時間,提高工作效率。
實現:
- 因為在iOS中的資料庫儲存大多是基於SQLite框架實現的,其他的比如Realm是有自己的一套資料庫儲存引擎,當然也有部分選擇蘋果自家的Core Data來實現的。在這裡我只對基於SQLite實現的做了一個視覺化的方案,後續可能會對其他儲存引擎的支援。
- 實現方式就是通過對sqlite的api一個封裝可以支援通用的查詢,刪除,修改。這裡暫時是沒有做新增一行的功能。但也可以解決大部分檢視資料來源庫,更新資料庫的需求了。
效果可以看下圖:
- 可以針對某一個table刪除具體選中的一行,可以修改某一行某一個欄位的值(當然主鍵除外)。我們都知道平常修改某一個行資料或者刪除的話都要限定一個where條件,一般來說是去判斷一個唯一標誌的欄位,但是我們並不能知道資料庫的唯一標誌是哪一個欄位,或者有些資料庫也是沒有主鍵存在的,當然也可以羅列出當前行的所有欄位去判斷,這就有點費精力了,有些欄位多的就需要判斷很多。所以這裡我用到了一個資料庫的影藏欄位rowid,通過這個rowid去找到我們具體要修改的哪一行,但是rowid是自增的並且不會重複出現的,如果刪除了一條資料,後面新增的資料rowid也是會在原來的最大rowid上+1的,如果刪除了某一行就會導致rowid和我們顯示出來的row對應不上了,感覺才找到的一條路瞬間好像又有點走不通了,不過我們可以加上限制條件找出這一行的rowid,然後通過rowid去修改這一行的資料。比如要修改顯示中的第三行資料可以通過這樣的一個條件語句去判斷“WHERE rowid IN (SELECT rowid FROM table limit 2,1)”。
- update資料庫的話也是通過上面的rowid去找到具體一行當做限定條件去修改,不過我們視覺化顯示出來都是字串型別的,修改成自己想要的資料,傳去update的時候再把string修改成對應欄位所有對應的資料型別去update。 ####使用
CocoaPods
1.更新cocoapods到最新版本。
2.新增 pod 'DatabaseVisual' 到你的podfile檔案中。
3.執行 pod install 或者 pod update.
4.import <DatabaseVisual/DatabaseManager.h>.
Manually
1.下載DatabaseManager資料夾.
2.新增原始檔到你的專案工程.
3.import "DatabaseManager.h"
工具使用方法也超級簡單,指定你當前存放資料庫的資料夾就行了。會把資料夾下面的所有.db .sqlite .sqlite3字尾的檔案顯示出來。
//you can specify the folder where the database resides
[DatabaseManager sharedInstance].dbDocumentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
[[DatabaseManager sharedInstance] showTables];
複製程式碼
已經更新在github上。如果喜歡請給個?。 寫得倉促,測試樣本也不多,有什麼問題請及時提給我。當然有什麼好的建議也歡迎提給我,大家共同探討做得更好。 後期應該會考慮加入Realm等其他儲存方式的視覺化。
最後附上 DatabaseVisual地址
歡迎轉載,並註明出處