数据存储之第三方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官网网址 ...
随机推荐
- JavaScript数组(参考资料)
JavaScript数组的长度和元素类型都是非固定的.因为数组的长度可随时改变,并且其数据在内存中也可以不连续,所以 JavaScript 数组不一定是密集型的,这取决于它的使用方式.1.Array. ...
- ie11下ajax用escape发送中文参数失败
一个项目中,登录请求是ajax,get模式.登录名无中文可以正常登录:登录名是中文则偶尔可以登录,大部分情况下无法登录,ajax请求无法发送成功. 登录名是用js的escape函数转码. 经过多次测试 ...
- 自己从0开始学习Unity的笔记 IV (C#循环练习输出素数)
来测试一下循环....刚刚学了while循环,测试一下输出1-100的素数 我想了一下,素数就是只能被1和本身整除,那就是只能被整除2次,我是顺着这个思路写的代码,如果被整除超过2次,那么肯定不是素数 ...
- Windows7 64位中出现的KERNELBASE.dll错误的解决方法
最近在服程序时遇到个问题,电脑是win764位,编译完的exe测试,偶尔总报错,报错是偶尔的,有时候报错很频繁,但是有一次测试,测试了半天都没有报错,我以为好,发布输出没一会儿又报错了,真是崩溃了,所 ...
- WP8.1StoreApp(WP8.1RT)---本地Toast
WP7/8中的Toast是不能在前台弹出的. WP8.1StoreApp可以利用Win8中的方式: private void Toast(string title,string content) { ...
- Java50道经典习题-程序10 自由落体
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? import java.util.Scanner; public cl ...
- kali linux之Audacity
常用音频隐写工具 安装: sudo apt install audacity 初次打开的界面 看波的宽度分辨长短音 比较细的就是短音,代表".",比较粗的就是长音,代表" ...
- LOJ#6047. 「雅礼集训 2017 Day10」决斗(set)
题面 传送门 题解 这么简单一道题我考试的时候居然只打了\(40\)分暴力? 如果我们把每个点的\(a_i\)记为\(deg_i-1\),其中\(deg_i\)表示有\(deg_i\)个数的\(A_i ...
- Requests Header | Http Header
Requests Header | Http Header Header 解释 示例 Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/html Accep ...
- 为什么在AI领域网络安全更重要?先睹为快~
AI迎来了改变世界的新机遇,同时也迎来了新的网络安全问题,只要是联网的系统就会有漏洞爆出~ 随着大数据的应用,人工智能逐渐走入千家万户并显示出巨大的市场空间,从机器人客服.自动驾驶汽车到无人机等,全都 ...