数据存储之第三方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

相关文章
|
3月前
|
关系型数据库 API 数据库
Python数据库访问与ORM框架:加速开发、提升效率
在现代软件开发中,数据库是不可或缺的组成部分。本文介绍了Python中数据库访问的重要性,并探讨了ORM框架(例如SQLAlchemy)如何帮助程序员加速开发、提升效率。通过使用ORM框架,开发人员可以轻松地将Python对象映射到数据库表,并且可以通过简洁的API进行数据库操作。此外,本文还讨论了ORM框架在处理复杂查询、维护数据一致性和实现数据库迁移方面的优势。
|
6月前
|
存储 JSON 数据库
Flutter必备技能:轻松掌握本地存储与数据库优化技巧!
Flutter必备技能:轻松掌握本地存储与数据库优化技巧!
129 0
|
1月前
|
存储 数据处理 数据库
构建高性能的数据库查询引擎
本文将介绍如何构建一个高性能的数据库查询引擎,以提升数据库查询的效率和响应速度。通过优化查询计划、索引设计和数据存储等方面,可以实现更快速和可扩展的数据库查询,为应用程序提供更好的用户体验和数据处理能力。
|
6天前
|
存储 数据采集 NoSQL
使用Python打造爬虫程序之数据存储与持久化:从网络到硬盘的无缝对接
【4月更文挑战第19天】本文探讨了爬虫中的数据存储与持久化技术,包括文本文件存储、数据库(关系型与非关系型)、NoSQL数据库和键值存储,以及ORM框架的使用。根据数据类型、规模和访问需求选择合适存储方式,并注意数据安全、备份和恢复策略。正确选择和应用这些技术能有效管理和利用爬取数据。
|
4月前
|
缓存 NoSQL Java
聊一聊缓存和数据库不一致性问题的产生及主流解决方案以及扩展的思考2
聊一聊缓存和数据库不一致性问题的产生及主流解决方案以及扩展的思考
51 0
|
4月前
|
消息中间件 canal 缓存
聊一聊缓存和数据库不一致性问题的产生及主流解决方案以及扩展的思考3
聊一聊缓存和数据库不一致性问题的产生及主流解决方案以及扩展的思考
189 0
|
4月前
|
存储 缓存 NoSQL
聊一聊缓存和数据库不一致性问题的产生及主流解决方案以及扩展的思考1
聊一聊缓存和数据库不一致性问题的产生及主流解决方案以及扩展的思考
76 0
|
10月前
|
消息中间件 缓存 NoSQL
Django开发-优化数据库实战解决方案(异步高效处理)
Django开发-优化数据库实战解决方案(异步高效处理)
141 0
|
存储 SQL Java
XOrmlite 一个方便实用的OrmLite数据库框架,支持一键集成
XOrmlite 一个方便实用的OrmLite数据库框架,支持一键集成
263 0
XOrmlite 一个方便实用的OrmLite数据库框架,支持一键集成