数据存储之第三方FMDB优化
最近项目要用到数据库,采用的是第三方FMDB, 之前做C#时用过sqlHelper,自己就按着sqlHelper的思路封装了一下,封装的也比较简单,看到网上有一些根据FMDB封装的ORM框架,但基本都是单表的.
按着ADO.Net的思路
1.连接数据库
2.打开数据库
3.操作数据库
4.关闭数据库
在使用查询数据时FMResultSet 用next遍历时不能关闭数据库
#import <Foundation/Foundation.h> #import "FMDB.h" @interface FMDBManager : NSObject -(BOOL)updateDataBase:(NSString *)sql withArgumentsInArray:(NSArray *)arguments; -(void)openDatabase; -(void)closeDatabase; -(FMResultSet *)QueryDataBase:(NSString *)sql withArgumentsInArray:(NSArray *)arguments; -(BOOL)updateDataBaseInTransaction:(NSArray *)sqlArray; @end
// // FMDBManager.m // XQBCommunityApp // // Created by City--Online on 16/1/14. // Copyright © 2016年 CityOnline_1. All rights reserved. // #import "FMDBManager.h" #import "FMDB.h" #import <sqlite3.h> /** * 数据库名字 */ #define XQB_DB_NAME @"XqbDB.sqlite" #define XQB_DB_PATH @"XqbDbDir" @interface FMDBManager () @property (nonatomic,strong) NSString *tablePath; @property (nonatomic,strong) FMDatabase *database; @end @implementation FMDBManager - (void)connectDataBase { NSFileManager *fileManager = [[NSFileManager alloc] init]; NSString *pathDocuments = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:]; NSString *databasePath = [NSString stringWithFormat:@"%@/%@", pathDocuments,XQB_DB_PATH]; // 判断文件夹是否存在,如果不存在,则创建 if (![[NSFileManager defaultManager] fileExistsAtPath:databasePath]) { [fileManager createDirectoryAtPath:databasePath withIntermediateDirectories:YES attributes:nil error:nil]; } else { NSLog(@"FileDir is exists."); } //获取数据库 的路径 _tablePath = [NSString stringWithFormat:@"%@/%@",databasePath,XQB_DB_NAME]; _database = [FMDatabase databaseWithPath:_tablePath]; NSLog(@"%@",_tablePath); } -(BOOL)updateDataBase:(NSString *)sql withArgumentsInArray:(NSArray *)arguments { return [_database executeUpdate:sql withArgumentsInArray:arguments]; } -(FMResultSet *)QueryDataBase:(NSString *)sql withArgumentsInArray:(NSArray *)arguments { FMResultSet *set=nil; set=[_database executeQuery:sql withArgumentsInArray:arguments]; return set; } -(void)openDatabase { //创建数据库 [self connectDataBase]; [_database open]; } -(void)closeDatabase { [_database close]; } -(BOOL)updateDataBaseInTransaction:(NSArray *)sqlArray { BOOL success=YES; [self connectDataBase]; sqlite3 *db=nil; @try { char *errmsg=NULL; int result=sqlite3_open(_tablePath.UTF8String, &db); if (result==SQLITE_OK) { if (sqlite3_exec(db, "begin", NULL, NULL, &errmsg)==SQLITE_OK) { sqlite3_free(errmsg); sqlite3_stmt *stmt=NULL; //执行事务 for (NSString *str in sqlArray) { , &stmt, NULL)==SQLITE_OK) { if (sqlite3_step(stmt)!=SQLITE_DONE) { sqlite3_finalize(stmt); } } } //提交事务 if (sqlite3_exec(db, "commit", NULL, NULL, &errmsg)==SQLITE_OK) { sqlite3_free(errmsg); } } } sqlite3_close(db); } @catch (NSException *exception) { char *errmsg=NULL; if (sqlite3_exec(db, "rollback", NULL, NULL, &errmsg)==SQLITE_OK) { success=NO; } } @finally { } return success; } @end
数据存储之第三方FMDB优化的更多相关文章
- 数据存储之第三方FMDB
上周四.周五在忙公司的事情和炒股,没来得及更新博客,这周就补一下,学习总结下FMDB. FMDB是对sqlite的封装,特别是在多线程情况下,使用sqlite是非常麻烦,而使用FMDB相对简单,下面是 ...
- TI C6000 数据存储处理与性能优化
存储器之于CPU好比仓库之于车间.车间加工过程中的原材料.半成品.成品等均需入出仓库,生产效率再快,如果仓库周转不善,也必然造成生产阻塞.如同仓库需要合理地规划管理一般,数据存储也需要恰当的处理技巧来 ...
- IOS 数据存储之 FMDB 详解
FMDB是用于进行数据存储的第三方的框架,它与SQLite与Core Data相比较,存在很多优势. FMDB是面向对象的,它以OC的方式封装了SQLite的C语言API,使用起来更加的方便,不需要过 ...
- IOS数据存储之FMDB数据库
前言: 最近几天一直在折腾数据库存储,之前文章(http://www.cnblogs.com/whoislcj/p/5485959.html)介绍了Sqlite 数据库,SQLite是一种小型的轻量级 ...
- 移动互联网实战--资源类APP的数据存储处理和优化
前言: 对于资源类的APP, 其音频/图形占据了APP本身很大的比例. 如何存储和管理这些资源文件, 成了一个颇具挑战性的难点. 移动端的碎片化, 高中低端手机的并存, 需要开发者不光是具备基础的存储 ...
- ByteArrary(优化数据存储和数据流)
原地址:http://www.unity蛮牛.com/blog-1801-799.html 首页 博客 相册 主题 留言板 个人资料 ByteArrary(优化数据存储和数据流) 分类:unity ...
- 【iOS开发-76】Private Contacts案例:导航控制器使用、数据传递、第三方类库使用、tableViewCell的加入删除、数据存储等
(1)效果 (2)源码与第三方类库下载 http://download.csdn.net/detail/wsb200514/8155979 (3)总结 --导航控制器,能够直接用代码的push和pop ...
- 性能优化之数据存储&DOM编程
多读书多看报 数据存储 ·在javascript中,数据存储的位置会对代码整体性能产生重大的影响. ·数据存储共有4种方式:字面量.变量.数组.对象成员. ·要理解变量的访问速度,就要理解作用域. ...
- 在AndroidStudio中数据存储第三方数据管理Bmob的使用
---恢复内容开始--- 在日常写代码的过程中我们比较痛苦的就是数据库的建立和使用,那么今天来介绍一下一个第三方的数据管理平台Bmonb. 一.我们首先进入Bmob的官网创建一个账号 Bome官网网址 ...
随机推荐
- 简易网页 html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- sharepoint 2013 补丁升级步骤
1. 安装过程合理: A. 可以同时在管理中心.两台前端.搜索服务器上安装重新发布的SP1补丁包(所提供的链接) B. 等待所有SP1补丁包安装完成,依次在管理中心.两台前端.搜索服务器上运行配置向导 ...
- Exp1 PC平台逆向破解 20164323段钊阳
实验目标 学习两种方法运行代码片段,并学习如何注入运行任何Shellcode. 三个实验内容如下: 1.手工修改可执行文件,改变程序执行流程,直接跳转到getshell函数 2.利用foo函数的bof ...
- java学习笔记—HTTP协议(10)
客户端浏览器和服务器Tomcat要进行基本的请求和响应的处理. 其实浏览器和服务器通信的数据的格式已经使用协议进行固定好了,只要双方发送固定格式的数据,那么就可以完成基本的通信. 如果开发者需要查看这 ...
- 记一次升级Ubuntu内核
uname -a 查看当前使用内核版本 升级指定内核 apt-get install linux-image-4.4.0-131-generic dpkg --get-selections | ...
- 总结day12 ----装饰器
一,什么是装饰器? 装饰器本质上就是一个python函数,他可以让其他函数在不需要做任何代码变动的前提下,增加额外的功能,装饰器的返回值也是一个函数对象. 装饰器的应用场景:比如插入日志,性能测试,事 ...
- Linux之E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?
解决 ubantu系统中 E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它? 的 问题. 1.解决办法: 当我们有的时候在使用apt-get install/update ...
- [Alpha]Scrum Meeting#5
github 本次会议项目由PM召开,时间为4月7日晚上10点30分 时长10分钟 任务表格 人员 昨日工作 下一步工作 木鬼 撰写博客目录 整理清明开会记录 SiMrua 模型再训练(issue#1 ...
- Python抓取远程文件获取真实文件名
用urllib下载远程文件并转存到hdfs服务器,在下载时,下载地址中不一定包含文件名,需要从连接信息中获取. 1 file_url = request.form.get('file_url') 2 ...
- geatpy - 遗传和进化算法相关算子的库函数(python)
Geatpy The Genetic and Evolutionary Algorithm Toolbox for Python Introduction Website (including doc ...