简介
sqlite是开发中常用的一种轻便型数据库, iOS中通常使用FMDB来操作sqlite,FMDB是目前iOS开发中最好的第三方库,github链接:https://github.com/ccgus/fmdb
FMDB的使用
FMDB的集成不再赘述,下面直接通过举例方式简述FMDB的使用方法
创建数据库
这里我使用的是可以保证线程安全的FMDatabaseQueue
类,在单例方法的初始化中,加入如下方法:
//设置数据库路径
NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *dbPath = [docsPath stringByAppendingPathComponent:@"test.db"];
//创建并打开数据库
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) {
//当表中字段特别多时,可以采用字典方式插入
//对于自增量的主键,插入时直接赋值为NULL即可
[db executeUpdate:@"insert into testTB values (:id, :a, :b, :c)"
withParameterDictionary:@{@"id":[NSNull null], @"a":@"avalue", @"b":@"bvalue", @"c":@6}];
}];
FAQ:
1.sqlite数据库的后缀名,db和sqlite有区别么?
答:木有!后缀只是为了方便一些工具识别数据库文件,从而可以双击打开,对于sqlite数据库,常用的后缀有:db,sqlite,sqlite3
2.
executeStatements
和executeUpdate
的区别
答:这两个方法都可以执行增删改操作,实现上分别调用的是sqlite3_exec
和sqlite_step
,所以这个问题主要是sqlite3_exec
和sqlite_step
区别。
对于sqlite3_exec
,本质上是对sqlite3_prepare_v2()
,sqlite3_step()
,sqlite3_finalize()
的封装。sqlite3_exec
适用sql语句比较简单的情况。简单来说,sqlite3_exec
只能传入一个字符串,然后回调结果,如果像创建数据库这种可以写到一个字符串中的sql语句,用exec是很方便的。但是如果要插入blob数据,或者sql语句中需要用到INSERT INTO myTable VALUES (?, ?, ?, ?)
这种方式,就需要用sqlite_step
方式了。
不过,我们在使用FMDB第三方库时,可以直接使用executeUpdate
方法,库本身已经给我们封装的很好了。
ps:sqlite3_exec
和sqlite_step
本身可能存在效率问题,待验证http://blog.csdn.net/zongshiwujie/article/details/7394101