ios中使用FMDB的几个小问题
2013-12-16 22:17
190 查看
今天调试BUG,发现几个问题都是对FMDB误用引起的,解决后记录一下:
然后用objectForKey取出某一列的值,如果该列为空,则返回NSNull,但是判断非空时发生错误:
上面的代码是错的,即使此列为空,也会走进非空的分支。要用下面的代码:
查询参数可以是变量,然后绑定参数,但是表名必须是常量,所以要这么写:
先提前把sql拼好,传给executeQuery方法的是一个常量
应该写成:
值为null的列处理
先是通过resultDictionary方法,将ResultSet转换成NSDictionaryFMResultSet *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]];
相关文章推荐
- ios中使用FMDB的几个小问题
- [IOS] ASIHttpRequest库使用过程中发现的几个小问题
- iOS 使用CocoaPods过程中的几个问题
- ios CoreData和FMDB最新使用问题总结
- iOS开发中使用FMDB解决数据存储问题---(写的比较详细,仔细看,有很大的参考价值)
- iOS开发中使用FMDB解决数据存储问题
- iOS开发中使用FMDB解决数据存储问题
- [IOS] ASIHttpRequest库使用过程中发现的几个小问题
- 几个问题(八)-------使用静态工厂方法的好处和坏处
- ios 中 使用自制framework导致 Duplicate symbol 的问题解决方法
- 使用linux的几个需要注意的问题(后续增补)
- Windows phone 7中关于Zune软件使用几个问题
- PHPExcel使用中遇到的几个问题
- IOS数据持久化存储之SQLite3第三方库FMDB的使用
- Cocopods安装与使用,顺带出的几个问题提一下
- ios 使用XCode编译时总是提示证书问题