FMDB的错误处理

来源:互联网 发布:centos复制文件夹命令 编辑:程序博客网 时间:2024/06/05 22:52

值为null的列处理

先是通过resultDictionary方法,将ResultSet转换成NSDictionary

FMResultSet *rs = [db executeQuery:sql];
while ([rs next]) {
    [result addObject:[rs resultDictionary]];
}

然后用objectForKey取出某一列的值,如果该列为空,则返回NSNull,但是判断非空时发生错误:

NSString* originFilePath = [row objectForKey:columnName];// 原始文件路径
if (originFilePath){    // 非空处理            }

上面的代码是错的,即使此列为空,也会走进非空的分支。要用下面的代码:

NSString* originFilePath = [row objectForKey:columnName];// 原始文件路径
if ((NSNull *)originFilePath != [NSNull null]){    // 非空处理            }

拼接SQL时,表名不能是变量

做一个简单的全表查询,返回结果居然是0 row,最后发现表名不能是变量,以下2种写法都是错的

FMResultSet *rs = [db executeQuery:@"select * from %@", tableName];

FMResultSet *rs = [db executeQuery:@"select * from ?", tableName];

查询参数可以是变量,然后绑定参数,但是表名必须是常量,所以要这么写:

NSString *sql = [NSString stringWithFormat:@"select * from %@", tableName];
FMResultSet *rs = [db executeQuery:sql];

先提前把sql拼好,传给executeQuery方法的是一个常量

传给executeQuery或者executeUpdate的参数,必须是NSObject

执行一句SQL时,FMDB报EXC_BAD_ACCESS,应用崩溃。在stackoverflow上查到,传给execute方法的参数,必须是NSObject。如果本来是原始数据类型如int,long等,要先用Wrapper类包装一下。以下的代码是错的:

FMResultSet *rs = [db executeQuery:sql, latestBackupTime, now];// latestBackupTime和now是long类型,造成EXC_BAD_ACCESS

应该写成:

long now = [[NSDate date] timeIntervalSince1970];// 传给executeQuery()的参数必须是NSObject,不能是原始数据类型,否则报EXC_BAD_ACCESS
FMResultSet *rs = [db executeQuery:sql, [NSNumber numberWithLong:latestBackupTime], [NSNumber numberWithLong:now]];
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 数学加减个十分不清怎么办 孩子b和d分不清怎么办 小孩b和d分不清怎么办 高一的数学不会怎么办 农村小孩到市里上学怎么办 和外国人打官司输了怎么办 碰见爱说你的领导怎么办 小孩脾气爆一句话就生气怎么办 小孩眼睛哭肿了怎么办 大人吵架吓到宝宝了怎么办 小孩晚上睡觉不踏实怎么办 二宝美籍大宝怎么办 小孩一洗澡就哭怎么办 孩子去外地上学学籍怎么办 非婚生子父亲想要孩子怎么办 非婚生子孩子父亲找不到了怎么办 3岁半宝宝认字怎么办 上课注意力不集中老是发呆怎么办 海绵宝宝吃了会怎么办 宝宝误吞李子核怎么办 24个月宝宝不愿意说话怎么办 孩子凉着肚子吐怎么办 教宝宝说话不会说怎么办 2岁宝宝语言退化怎么办 两周宝宝嗓子哑怎么办 幼儿园孩子上课爱说话老师怎么办 一岁宝宝不会爬怎么办 孩子说话不太清楚怎么办 十一个月宝宝不爱吃饭怎么办 14个月宝宝不爱吃饭怎么办 一岁宝宝喜欢哭怎么办 4岁儿童不会说话怎么办 8个月宝宝37.5度怎么办 8个月婴儿37.5度怎么办 5个月宝宝38度怎么办 5个月宝宝发烧怎么办 五个月小孩38度怎么办 宝宝3岁还不会说话 怎么办 两岁宝宝流口水厉害怎么办 两周宝宝不说话怎么办 两岁宝宝说话有点口吃怎么办