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
- FMDB的错误处理
- FMDB FMDB的使用方法
- fmdb常见错误
- IOS-swift-fmdb错误
- FMDB处理动态插入语句
- FMDB的基本操作
- FMDB的使用
- FMDB的CRUD
- FMDB的使用方法
- FMDB库的使用
- FMDB的使用
- FMDB的使用
- FMDB的使用
- FMDB的使用
- FMDB库的使用
- sqlite3 FMDB的使用
- FMDB的简单使用方法
- FMDB的使用
- android性能内存优化
- centos 7 如何安装mysql以及 mysql的c语言api环境
- nefu84-扩展欧几里德
- 记忆里的湘潭师专
- UITableView隐藏多余的分割线
- FMDB的错误处理
- ARM Linux 如何模拟X86 PTE中的Present Young和Dirty标志位
- aix中的vi编辑器的使用
- Java语言描述进程基本概念
- android开发者好用的镜像网址
- Learning C++ by Creating Games With UE4(15.05.08)-3(Chapter 1)
- Spring Aop总结
- 归并排序和桶排序
- 最大熵用于文本分类