前言:
不知道大家平時在iOS中需要查看數(shù)據(jù)庫內(nèi)容的時候是否有困擾取刃,以前做法都是把數(shù)據(jù)庫文件導出到電腦上,然后通過mac上的數(shù)據(jù)庫可視化軟件打開查看里面的數(shù)據(jù)。一來一回挺折騰的第岖,不滿于這種浪費時間效率低下的方式,所以想著要是能夠直接在手機上或者模擬器上查看數(shù)據(jù)庫多好侵续,直接操作數(shù)據(jù)庫多好,可以大大節(jié)省時間憾儒,提高工作效率询兴。
實現(xiàn):
- 因為在iOS中的數(shù)據(jù)庫存儲大多是基于SQLite框架實現(xiàn)的,其他的比如Realm是有自己的一套數(shù)據(jù)庫存儲引擎起趾,當然也有部分選擇蘋果自家的Core Data來實現(xiàn)的。在這里我只對基于SQLite實現(xiàn)的做了一個可視化的方案警儒,后續(xù)可能會對其他存儲引擎的支持训裆。
- 實現(xiàn)方式就是通過對sqlite的api一個封裝可以支持通用的查詢眶根,刪除,修改边琉。這里暫時是沒有做新增一行的功能属百。但也可以解決大部分查看數(shù)據(jù)源庫,更新數(shù)據(jù)庫的需求了变姨。
效果可以看下圖:
- 可以針對某一個table刪除具體選中的一行,可以修改某一行某一個字段的值(當然主鍵除外)。我們都知道平常修改某一個行數(shù)據(jù)或者刪除的話都要限定一個where條件扩氢,一般來說是去判斷一個唯一標志的字段录豺,但是我們并不能知道數(shù)據(jù)庫的唯一標志是哪一個字段饭弓,或者有些數(shù)據(jù)庫也是沒有主鍵存在的,當然也可以羅列出當前行的所有字段去判斷兢哭,這就有點費精力了,有些字段多的就需要判斷很多夫嗓。所以這里我用到了一個數(shù)據(jù)庫的影藏字段rowid迟螺,通過這個rowid去找到我們具體要修改的哪一行,但是rowid是自增的并且不會重復出現(xiàn)的舍咖,如果刪除了一條數(shù)據(jù)矩父,后面新增的數(shù)據(jù)rowid也是會在原來的最大rowid上+1的窍株,如果刪除了某一行就會導致rowid和我們顯示出來的row對應不上了瑰钮,感覺才找到的一條路瞬間好像又有點走不通了冒滩,不過我們可以加上限制條件找出這一行的rowid,然后通過rowid去修改這一行的數(shù)據(jù)浪谴。比如要修改顯示中的第三行數(shù)據(jù)可以通過這樣的一個條件語句去判斷“WHERE rowid IN (SELECT rowid FROM table limit 2,1)”开睡。
- update數(shù)據(jù)庫的話也是通過上面的rowid去找到具體一行當做限定條件去修改,不過我們可視化顯示出來都是字符串類型的,修改成自己想要的數(shù)據(jù)哮翘,傳去update的時候再把string修改成對應字段所有對應的數(shù)據(jù)類型去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"
工具使用方法也超級簡單跑揉,指定你當前存放數(shù)據(jù)庫的文件夾就行了扮饶。會把文件夾下面的所有.db .sqlite .sqlite3后綴的文件顯示出來甜无。
//you can specify the folder where the database resides
[DatabaseManager sharedInstance].dbDocumentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
[[DatabaseManager sharedInstance] showTables];
已經(jīng)更新在github上。如果喜歡請給個??哥遮。
寫得倉促岂丘,測試樣本也不多眠饮,有什么問題請及時提給我奥帘。當然有什么好的建議也歡迎提給我,大家共同探討做得更好仪召。
后期應該會考慮加入Realm等其他存儲方式的可視化寨蹋。
最后附上 DatabaseVisual地址
歡迎轉載,并注明出處