簡介
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.
executeStatements
和executeUpdate
的區(qū)別
答:這兩個方法都可以執(zhí)行增刪改操作,實現(xiàn)上分別調(diào)用的是sqlite3_exec
和sqlite_step
,所以這個問題主要是sqlite3_exec
和sqlite_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_exec
和sqlite_step
本身可能存在效率問題,待驗證http://blog.csdn.net/zongshiwujie/article/details/7394101