准备工作
在当前类的延展中声明一个数据库的对象
@interface RootViewController ()
@property (strong, nonatomic)FMDatabase *db;
@end
创建一个数据库的路径
- (NSString *)dbPath{
NSString *dbPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES)firstObject] stringByAppendingPathComponent:@"FMDB.sqlite"];
return dbPath;
}
打开或者创建一个数据库
- (FMDatabase *)openOrCreate{
//创建数据库对象
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
self.db = [FMDatabase databaseWithPath:[self dbPath]];
});
if ([self.db open]) {
return self.db;
}else {
NSLog(@"打开失败");
return nil;
}
}
FMDB之无返回结果集
一切不是SELECT命令的命令都视为更新。这包括 CREATE, UPDATE, INSERT,ALTER,COMMIT, BEGIN, DETACH, DELETE, DROP, END, EXPLAIN, VACUUM, and REPLACE (等)。简单来说,只要不是以SELECT开头的命令都是UPDATE命令,也就是无返回结果集。
示例代码
- (BOOL)opertationNoResultWithSql:(NSString *)sql operationTag:(NSString *)tag{
//打开数据库
FMDatabase *db = [self openOrCreate];
//执行非查询操作
BOOL isSuccess = [db executeUpdate:sql];
//当操作完成后,关闭数据路
[self.db close];
if (isSuccess) {
NSLog(@"%@操作成功",tag);
return YES;
}else{
NSLog(@"%@操作失败",tag);
return NO;
}
}
FMDB之有返回结果集
- SELECT命令就是查询,执行查询的方法是以 -excuteQuery开头的。
- 执行查询时,如果成功返回FMResultSet对象, 错误返回nil. 与执行更新相当,支持使用 NSError**参数。同时,你也可以使用 -lastErrorCode和-lastErrorMessage获知错误信息。
- 为了遍历查询结果,你可以使用while循环。你还需要知道怎么跳到下一个记录。使用FMDB,很简单实现。
示例代码
- (NSArray *)queryWithSql:(NSString *)sql{
//打开数据库
FMDatabase *db = [self openOrCreate];
//执行sql语句,将返回结果先暂存到resultSet中
FMResultSet *resultSet = [db executeQuery:sql];
//从resultSet中取出每一条记录
NSMutableArray *array = [NSMutableArray array];
while ([resultSet next]) {//next:判断sqlite3_step(stament) == row
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
/*每次执行while循环的时候,都是一个新的记录被取出,所以我们需要一个新的字典来盛放新的记录,
所以每次进while循环的时候都需要构建一个新的字典对象。*/
NSString *name = [resultSet stringForColumn:@"name"];
NSString *gender = [resultSet stringForColumn:@"gender"];
NSInteger age = [resultSet intForColumn:@"age"];
[dic setValue:name forKey:@"name"];
[dic setValue:gender forKey:@"gender"];
[dic setValue:@(age) forKey:@"age"];
[array addObject:dic];
}
//释放resultSet
[resultSet close];
//关闭数据库
[db close];
return array;
}
网友评论