本来应用里很多代码,都是用原生的sqlite3 API,确实感到很不方便,API极不友好。昨天看到唐巧的博客,知道了FMDB,试用一下果然不错,记录一下
这个开源项目的github地址是:FMDB
安装最方便的方式是用CocoaPods来安装,见官方文档。FMDB把SQL操作分为update和query,所以API不是executeUpdate,就是executeQuery,下面是几个简单的例子:
-(void) clearDeleteRecordForTable:(NSString*)tableName withRecords:(NSMutableArray*)deleteIds
{
NSString *dbFilePath = [YLSGlobalUtils getDatabaseFilePath];
FMDatabase *db = [FMDatabase databaseWithPath:dbFilePath];
NSString *sql = @"delete from tb_deleteRecord where table_name = ? and id = ?";
[db open];
for(NSString *deleteId in deleteIds){
[db executeUpdate:sql, tableName, deleteId];
}
[db close];
}
这个是executeUpdate的例子,挺简单的。下面是一个executeQuery的例子:
-(NSMutableArray*) queryDeleteData:(NSString*)tableName
{
NSMutableArray *result = [NSMutableArray new];
NSString *dbFilePath = [YLSGlobalUtils getDatabaseFilePath];
FMDatabase *db = [FMDatabase databaseWithPath:dbFilePath];
[db open];
FMResultSet *rs = [db executeQuery:@"select id from tb_deleteRecord where upper(table_name) = upper(?)", tableName];
while ([rs next]) {
[result addObject:[rs objectForColumnName:@"id"]];
}
[db close];
return result;
}
值得注意的是,以前用原生sqlite3 API,拼接sql语句的时候,placeholder用的是%@,但这个方式是FMDB所反对的:
Thus, you SHOULD NOT do this (or anything like this):
[db executeUpdate:[NSString stringWithFormat:@"INSERT INTO myTable VALUES (%@)", @"this has \" lots of ' bizarre \" quotes '"]];
Instead, you SHOULD do:
[db executeUpdate:@"INSERT INTO myTable VALUES (?)", @"this has \" lots of ' bizarre \" quotes '"];
总的来说,FMDB不推荐使用%@拼接sql,而是要求使用?或者:name来占位。这点我很喜欢,因为我本来写的N个bug,都是因为在sql里忘记加引号造成的,比如说:
@"select * from table where name = %@"
这个sql就写错了,应该写成:
@"select * from table where name = '%@'"
非常麻烦,一不小心写漏了SQL执行就会报错,现在用FMDB,错误的几率就减小了很多。另外FMResultSet的objectForColumnName等方法也十分方便。下面还有一个更方便的:
-(NSMutableArray*) queryUpdateData:(NSString*)tableName
{
NSMutableArray *result = [NSMutableArray new];
NSString *dbFilePath = [YLSGlobalUtils getDatabaseFilePath];
FMDatabase *db = [FMDatabase databaseWithPath:dbFilePath];
[db open];
long now = [[NSDate date] timeIntervalSince1970];
FMResultSet *rs = [db executeQuery:@"select * from %@ where modify_date between ? and ? and (create_date not between ? and ?)", tableName, latestBackupTime, now, latestBackupTime, now];
while ([rs next]) {
[result addObject:[rs resultDictionary]];
}
[db close];
return result;
}
就是[FMResultSet resultDictionary]方法,
可以直接将一行的记录转换成NSDictionary,比原生sqlite3 API好用很多
总的来说,FMDB的API很直观,也很方便。项目切换到FMDB的成本也非常低,强烈推荐试一下
分享到:
相关推荐
此demo使用单例使用FMDB对数据库进行增、删、改、查;demo实现详细
这是一个数据持久化存储库FMDB在Swift工程中使用的一个经典示例!希望对同行有所裨益!
ios数据库sqlite封装,FMDB最新打包,简单方便!
关于FMDB的简单曾删改查操作
iOS-基于FMDB的操作封装,模型对象的增删改查 详细使用介绍请参考:http://blog.csdn.net/u014220518/article/details/78189927
(FMDB + runtime)数据库操作框架 YUDBFramework
使用fmdb的一个ios demo
基于fmdb的二次封装 实现增删改查 (条件查询,模糊查询)
当我们在做一个app的收藏页面或者在面对app的数据库时 十分头疼, 那么我在这为大家提供一个FMDB实列模板 希望对家有帮助,它简化了我对数据库的操作
不仅可以处理系统自带的属性字段,还能将模型中的模型转成表数据存储,数据读取与存储直接面向对象:上传的代码是实现源代码不是demo(比较大),大家可以看看,完整demo地址:...
iOS数据库管理—FMDB的使用。详情见链接http://blog.csdn.net/xbenlang/article/details/17955317
swift 3.0中调用fmdb。 详细代码去github上下载: https://github.com/tom555cat/FMDB-Swift.git
NULL 博文链接:https://jaybril.iteye.com/blog/1935119
一个简单的用FMDB实现的ios用户登录Demo
ios 上对sqlite封装的fmdb的基本操作。。
http://blog.csdn.net/xyz_lmn/article/details/9312837 iOS学习笔记——数据库操作(使用FMDB)
数据库操作FMDB和WCDB的封装,增删查改,和本地搜索,由于文件有点大,上传不了,git代码:https://github.com/greatRong6/DatabaseManager,
使用说明参照我的博客,该文件只作为工具类,并不能直接运行,请将代码copy至项目中具体配置使用
很好的一篇FMDB Demo
通过 fmdb 进行的数据库的 基本操作(增删改查 )查找是使用 UISearchBar 和UISearchDisplayController 进行混合使用