做專案的過程中經常會遇到處理一些比較大而且比較固定的資料,比如汽車的品牌,型號,系列,或者是地區列表,這些資料都有乙個共同的特點,那就是資料基本上不會發生太大的變化,而且資料量比較大,如果從請求伺服器,會非常慢,效能非常差,所以就需要將其放到本地處理,一般我們會將地區製作成plist檔案讀取,但是對於汽車品牌資料量大的資料,這種做法就不適用了。這裡提供一種比較方便的方法,就是找乙個.db檔案的資源,然後將其匯入專案,使用fmdb對其進行操作。
sqlite是乙個輕量級的關聯式資料庫,ios本身也是支援sqlite的,但是使用時非常不便,於是就出現了fmdb開源庫,fmdb實際上是對sqlite api進行了進一步的封裝,使用更加便捷,**也比較清晰。在使用fmdb之前,首先要匯入fmdb庫,相信大家都已經會導第三方庫了,所以在這裡就不再贅述導庫的過程,直接說說如何使用fmdb吧。
首先我們來認識一下fmdb中比較重要的三個類 1.fmdatabase
:是乙個提供 sqlite 資料庫的類,用於執行 sql 語句。 2.fmresultset
:用在 fmdatabase 中執行查詢的結果的類。 3.fmdatabasequeue
:在多執行緒下查詢和更新資料庫用到的類。
然後就是對資料庫的相應的操作了,在對資料庫操作之前,先給大家分享乙個鏈結,便於隨時查詢sqlite語句,sqlite語句學習鏈結,好了,廢話不多說,接下來就是對資料庫的操作了。獲取資料庫的路徑
nsstring *path = [[nsbundle mainbundle] pathforresource:@"vehicle_dict (1)" oftype:@"db"];
複製**
建立執行sqlite資料庫的類
fmdatabase *database = [fmdatabase databasewithpath:path];
複製**
開啟資料庫
[database open];
複製**
執行查詢操作
fmresultset *result = [database executequery:@"select distinct dvn_brand, dvn_brand_logo, dvn_brand_english from dict_vehicle_new order by dvn_brand_english asc;"];
while ([result next])
複製**
fmdb提供了如下幾種方法來獲取不同型別的資料
intforcolumn:
longforcolumn:
longlongintforcolumn:
boolforcolumn:
doubleforcolumn:
stringforcolumn:
dateforcolumn:
dataforcolumn:
datanocopyforcolumn:
utf8stringforcolumnindex:
objectforcolumn:
複製**
通常我們並不需要關閉fmresultset
,因為fmresultset
會隨著相關資料庫的關閉而自動關閉。執行更新語句sqlite更新語句
[database executeupdate:@"update dict_vehicle_new set dvn_brand = '凱瑞', dvn_brand_english = 'k'"];
複製**
執行插入語句sqlite插入語句
不確定的引數用?來佔位(後面引數必須是oc物件,;代表語句結束)
[database executeupdate:@「insert into dict_vehicle_new (dvn_brand, dvn_brand_english) values (?,?);」,'寶馬','b'];
不確定的引數用%@,%d等來佔位 (引數為原始資料型別,執行語句不區分大小寫)
[database executeupdatewithforamat:@「insert into dict_vehicle_new (dvn_brand, dvn_brand_english) values (%@,%@);」,'寶馬','b]
//3.引數是陣列的使用方式
[database executeupdate:@「insert into
dict_vehicle_new(dvn_brand, dvn_brand_english) values (?,?);」withargumentsinarray:@['寶馬','b']];
複製**
執行刪除語句sqlite刪除語句
[database executeupdate:@「delete from dict_vehicle_new where dvn_brand = ?;」,'寶馬'];
複製**
**fmdatabasequeue **fmdatabase
這個類執行緒是不安全的,如果在多個執行緒中同時使用乙個fmdatabase
例項,會造成資料混亂等問題 為了保證執行緒安全,fmdb提供方便便捷的fmdatabasequeue
fmdatabasequeue 的建立
nsstring *path = [[nsbundle mainbundle] pathforresource:@"vehicle_dict (1)" oftype:@"db"];
fmdatabasequeue *queue = [fmdatabasequeue databasequeuewithpath:path];
複製**
簡單使用
[queue indatabase:^(fmdatabase *db)
}];複製**
使用事物
[queue intransaction:^(fmdatabase *db, bool *rollback)
}];複製**
為了檢視sqlite中的資料,乙個好的圖形化資料庫的管理工具是必不可少的,起初我使用的是sqlpro for sqlite read-only這個工具,但是後來發現這個工具是唯讀的,即只能執行查詢操作,並不能進行增,刪,更新操作,經同事推薦,現在使用db browser for sqlite,這個工具能夠實現增,刪,改,查,使用也非常方便,如下圖所示:
我寫了乙個簡單的demo,讀取資料庫汽車的品牌,型號,系列的例子,demo位址,如果有任何問題,可以私聊。如果**寫的有問題,歡迎大神指正,小弟將不甚感激.
iOS 檔案讀取
在ios的開發中,經常遇到要讀寫檔案的情況,例如處理 採集資訊等,那麼在ios中對檔案的讀寫有兩種方式 1 使用nsdata 來將整個資料讀取到記憶體中 將檔案寫到檔案中 使用這種方式比較適合針對小檔案的讀寫,可以全部的讀到記憶體中處理,比如說全域性性的配置檔案等。2 使用c的api來讀取 在ios...
Android讀取assets的db檔案
1.開啟assets的db檔案 2.讀取db檔案 如下 public class sqldm else else try 最後關閉就可以了 fos.flush fos.close is.close catch ioexception e 如果沒有這個資料庫 我們已經把他寫到sd卡上了,然後在執行一次...
iOS檔案寫入讀取
最近在學習 ios開發中的資料持久化裡的檔案讀取 以下是自己的寫的一點東西 還請各位看官老爺多多指點 ios在進行資料持久化中採用沙盒,不允許非本應用程式以外的其他應用程式訪問該應用系統的一些檔案.ios8以後沙盒許可權不再像以前那麼嚴格 在進行本地檔案讀取操作中,首先需要明確 路徑 這個 詞 我們...