数据存储之第三方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:0];
    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) {
                    if (sqlite3_prepare_v2(db, [str UTF8String], -1, &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
时间: 2024-10-13 13:53:29

数据存储之第三方FMDB优化的相关文章

存储分层:企业数据存储类型选择与优化

在2017云栖大会-成都峰会上,阿里云存储服务产品专家周皓做了题为<存储分层:企业数据存储类型选择与优化>的分享.基于大规模飞天分布式系统的阿里云对象存储OSS具有可靠.安全.易用.和弹性高的特点,广泛应用在企业级备份等领域.OSS的存储类型依据访问数据的热度可分为三种,即标准类型.低频类型和归档类型,每种存储类型在存储时长.存储单价以及访问频度等方面均有区分,适用于不同的应用场景.

IOS开发:FMDB数据存储解析

  FMDB是面向对象的,它以OC的方式封装了SQLite的C语言API,使用起来更加的方便,不需要过多的关心数据库操作的知识.但是它本身也存在一些问题,比如跨平台,因为它是用oc的语言封装的,所以只能在ios开发的时候使用,如果想实现跨平台的操作,来降低开发的成本和维护的成本,就需要使用比较原始的SQLite. FMDB是用于进行数据存储的第三方的框架,它与SQLite与Core Data相比较,存在很多优势. Core Data是ORM的一种体现,使用Core Data需要用到模型数据的转化

基于SaaS的通用评审系统数据存储模型的优化研究

基于SaaS的通用评审系统数据存储模型的优化研究 王锋 韩学奇 主要针对构建基于SaaS模式的通用评审系统时需要解决的数据存储问题展开.着重对传统的可定制数据存储模型中,存储利用率和数据访问性能较低的缺点,结合数据访问热度指标.数据切分理论和元数据驱动的思想,在传统键值对数据存储模型的基础上,提出了适用于可定制的SaaS系统的基于热度的元数据驱动键值对区分调用的存储解决方案:同时,通过引入缓存机制对改进后的可定制数据存储模型进行了优化.最后对新模型和优化算法进行了实验研究,实验结果证明了该优化方

西部数据发布针对现代数据中心优化的冷数据存储硬盘

 全球领先的现代化数据中心存储领导者西部数据发布了旗下创新的WD Ae 硬盘产品线.针对在网络规模数据中心新兴的归档分层存储,该系列产品为此归档存储独特运营特点进行了特殊设计.WD Ae硬盘基于为实现最优总拥有成本(TCO)的平台设计,其最低功耗性能与Progressive Capacity (渐进式扩充容量模式) 为大规模云架构存储开创了全新的存储分层. "现代化数据中心客户给我们提出了专为持续扩展的冷数据储存而设计的硬盘解决方案需求."西部数据存储技术事业部高级副总裁兼总经理Mat

服务器应该从八个方面优化数据存储

计算机中由存放程序和数据的各种存储设备.控制部件及管理信息调度的设备(硬件)和算法(软件)所组成的系统.计算机的主存储器不能同时满足存取速度快.存储容量大和成本低的要求,在计算机中必须有速度由慢到快.容量由大到小的多级层次存储器,以最优的控制调度算法和合理的成本,构成具有性能可接受的存储系统.存储系统的性能在计算机中的地位日趋重要,主要原因是: ①诺伊曼体系结构是建筑在存储程序概念的基础上,访存操作约占中央处理器(CPU)时间的70%左右. ②存储管理与组织的好坏影响到整机效率. ③现代的信息处

阿里云数据库,破解大型网站架构设计中的数据存储难题

摘要:3月10日,2017阿里云网站行业热点问题和解决方案线下研讨会在上海举行.在本次研讨会上,阿里云数据库团队产品专家王义成(花名挚尤)针对于大型网站的数据库架构设计以及阿里云ApsaraDB所提供的服务管理和解决方案进行了深入介绍. 分享者简介:王义成(花名挚尤),阿里云数据库团队产品专家,负责阿里云NoSQL数据库的产品规划.加入阿里巴巴近5年的时间,参与过多种云数据库的产品设计工作.目前主要负责阿里云的MongoDB.Redis以及MemCache产品,旨在为广大客户提供安全可靠的数据库

基于表格存储的高性能监控数据存储计算方案

概述         随着软件架构的愈发复杂,了解系统现状.调查问题的困难度也增加了很多.此时,一套完善的监控方案能够让开发和运维工程师快速排查问题,更好的维护系统的稳定性.        开源监控方案中,Zabbix.Nagios都是不错的监控软件,可以针对数十万的设备监控数百万的指标,强大的功能让开发和运维都很赞叹.但是,网上经常看到的抱怨是其写入和存储能力的不足,以Zabbix为例,文章[1]提到使用NoSQL方案(HBase.Cassandra.Riak)比利用传统RDBMS方案(MyS

基于云上分布式NoSQL的海量气象数据存储和查询方案

前言 气象数据是一类典型的大数据,具有数据量大.时效性高.数据种类丰富等特点.气象数据中大量的数据是时空数据,记录了时间和空间范围内各个点的各个物理量的观测量或者模拟量,每天产生的数据量常在几十TB到上百TB的规模,且在爆发性增长.如何存储和高效的查询这些气象数据越来越成为一个难题. 传统的方案常常采用关系型数据库加文件系统的方式实现这类气象数据的存储和实时查询,这种方案在可扩展性.可维护性和性能上都有一些缺陷,随着数据规模的增大缺点越来越明显.最近几年,学界和业界开始不约而同的转向利用分布式N

使用XML进行数据存储与备份的实现(2)

xml|备份|数据 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  $fields=mysql_list_fields("embed",$table,$con);$j=0;//$num_fields=mysql_field_name($fields,$j);//echo $num_fields;while ($j<mysql_num_fiel