博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS FMDB有返回结果集和无返回结果集
阅读量:6228 次
发布时间:2019-06-21

本文共 2343 字,大约阅读时间需要 7 分钟。

#准备工作 在当前类的延展中声明一个数据库的对象

@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;}复制代码

转载于:https://juejin.im/post/5c1a0dfde51d4558bf39363a

你可能感兴趣的文章
mysql双机热备的实现
查看>>
前加绩中国、信雅达高级全栈工程师:吴劲松
查看>>
-bash: pod: command not found 解决办法
查看>>
GCD hdu1695容斥原理
查看>>
Node.js:回调函数
查看>>
python 发送邮件 <QQ+腾讯企业邮箱>
查看>>
细数JDK里的设计模式
查看>>
Linux~上部署.net MVC出现的问题与解决
查看>>
DDD~充血模型和失血模型
查看>>
android DPI与分辨率的关系及计算方式
查看>>
forward_list
查看>>
伪分布式网络爬虫框架的设计与自定义实现(一)
查看>>
解决npm ERR! Unexpected end of JSON input while parsing near的方法汇总
查看>>
MySQL 入门
查看>>
js的操作及css样式
查看>>
bootstrapValidator关于js,jquery动态赋值不触发验证(不能捕获“程序赋值事件”)解决办法...
查看>>
数据库设计基础>范式
查看>>
POJ 3461 Oulipo(模式串在主串中出现的次数)
查看>>
Openstack的镜像属性
查看>>
【分享】用Canvas实现画板功能
查看>>