SQLite&FMDB

簡介

sqlite是開發(fā)中常用的一種輕便型數(shù)據(jù)庫, iOS中通常使用FMDB來操作sqlite,F(xiàn)MDB是目前iOS開發(fā)中最好的第三方庫,github鏈接:https://github.com/ccgus/fmdb

FMDB的使用

FMDB的集成不再贅述,下面直接通過舉例方式簡述FMDB的使用方法

創(chuàng)建數(shù)據(jù)庫

這里我使用的是可以保證線程安全的FMDatabaseQueue類,在單例方法的初始化中,加入如下方法:

//設(shè)置數(shù)據(jù)庫路徑
NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *dbPath   = [docsPath stringByAppendingPathComponent:@"test.db"];

//創(chuàng)建并打開數(shù)據(jù)庫
staticInstance->_dbQueue = [FMDatabaseQueue databaseQueueWithPath:dbPath];

建表

    [self.dbQueue inDatabase:^(FMDatabase *db) {
      [db executeStatements:@"CREATE TABLE IF NOT EXISTS testTB (id integer PRIMARY KEY AUTOINCREMENT, a text, b text, c integer)"];
    }];

插入

[self.dbQueue inDatabase:^(FMDatabase *db) {
//當(dāng)表中字段特別多時,可以采用字典方式插入
//對于自增量的主鍵,插入時直接賦值為NULL即可
        [db executeUpdate:@"insert into testTB values (:id, :a, :b, :c)" 
    withParameterDictionary:@{@"id":[NSNull null], @"a":@"avalue", @"b":@"bvalue", @"c":@6}];
    }];

FAQ:

1.sqlite數(shù)據(jù)庫的后綴名,db和sqlite有區(qū)別么?
答:木有!后綴只是為了方便一些工具識別數(shù)據(jù)庫文件,從而可以雙擊打開,對于sqlite數(shù)據(jù)庫,常用的后綴有:db,sqlite,sqlite3

2.executeStatementsexecuteUpdate的區(qū)別
答:這兩個方法都可以執(zhí)行增刪改操作,實現(xiàn)上分別調(diào)用的是sqlite3_execsqlite_step ,所以這個問題主要是sqlite3_execsqlite_step區(qū)別。
對于sqlite3_exec,本質(zhì)上是對 sqlite3_prepare_v2(), sqlite3_step(), sqlite3_finalize()的封裝。sqlite3_exec適用sql語句比較簡單的情況。簡單來說,sqlite3_exec只能傳入一個字符串,然后回調(diào)結(jié)果,如果像創(chuàng)建數(shù)據(jù)庫這種可以寫到一個字符串中的sql語句,用exec是很方便的。但是如果要插入blob數(shù)據(jù),或者sql語句中需要用到INSERT INTO myTable VALUES (?, ?, ?, ?)這種方式,就需要用sqlite_step方式了。
不過,我們在使用FMDB第三方庫時,可以直接使用executeUpdate方法,庫本身已經(jīng)給我們封裝的很好了。
ps:sqlite3_execsqlite_step本身可能存在效率問題,待驗證http://blog.csdn.net/zongshiwujie/article/details/7394101

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容