数据存储之第三方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官网网址 ...
 
随机推荐
- linq与数据库之添加
			
这个是linq的添加显示 代码如下: //添加 private void button2_Click(object sender, EventArgs e) { string strstu = &qu ...
 - Vue前端数据采集 埋点 追踪用户系列行为
			
什么是埋点? 综合 vue埋点 埋点分析,是网站分析的一种常用的数据采集方法.数据埋点分为初级.中级.高级三种方式.数据埋点是一种良好的私有化部署数据采集方式. 埋点技术如何采集数据,有何优缺 ...
 - Media change : please insert the disk labeled
			
在Debian中使用apt-get安装软件包时经常会提示让你插入netinst的光盘: Media change: please insert the disc labeled 当没有时就无法进行安装 ...
 - 自动统计安卓log中Anr,Crash,Singnal出现数量的Python脚本 (转载)
			
自动统计安卓log中Anr,Crash,Singnal出现数量的Python脚本 转自:https://www.cnblogs.com/ailiailan/p/8304989.html 作为测试, ...
 - JSONP前世今生及原理
			
https://blog.csdn.net/hansexploration/article/details/80314948 http://www.cnblogs.com/yuzhongwusan/a ...
 - 1415: 小ho的01串 [字符串]
			
点击打开链接 1415: 小ho的01串 [字符串] 题目描述 有一个由0和1组成的字符串,它好长呀--------一望无际 恩,说正题,小ho的数学不太好,虽然是学计算机的但是看见0和1也是很头疼的 ...
 - “全栈2019”Java第一百零七章:匿名内部类与构造方法注意事项
			
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
 - jvm学习笔记(一)
			
一.java的运行原理 开发人员编写java代码(.java文件) 编译器将.java文件编译成字节码文件(.class文件) 字节码被装入内存,当字节码被装入内存之后,它就会被解释器解释执行或是被即 ...
 - Rabbitmq 消息对列 生产者与消费者的具体实现 springboot
			
RabbitMQ 基本介绍 RabbitMQ的设计理念是.只要有接收消息的队列. 邮件就会存放到队列里. 直到订阅人取走. . 如果没有可以接收这个消息的消息队列. 默认是抛弃这个消息的.. 我实现的 ...
 - leetcode-896-单调数列
			
题目描述: 如果数组是单调递增或单调递减的,那么它是单调的. 如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的. 如果对于所有 i <= j,A[i] ...