iOS FMDB的使用

简介:

SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库。iOS SDK 很早就支持了 SQLite,在使用时,只需要加入 libsqlite3.dylib 依赖以及引入 sqlite3.h 头文件即可。但是,原生的 SQLite API 在使用上相当不友好,在使用时,非常不便。于是,开源社区中就出现了一系列将 SQLite API 进行封装的库,而 FMDB (https://github.com/ccgus/fmdb) 则是开源社区中的优秀者。

使用: (BESTAccountsManager 为账号数据管理分类, BESTAccountItem 为账号模型)

static FMDatabase *_db;
static BESTAccountsManager *sharedManager = nil;
// 单例
+ (instancetype)sharedManager {
    @synchronized (self) {
        if (sharedManager == nil) {
            sharedManager = [[BESTAccountsManager alloc] init];
        }
    }
    return sharedManager;
}

// 打开数据库

- (void)openAccountManager {
    NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"AccountManager.db"];
    _db = [FMDatabase databaseWithPath:path];
    
    if ([_db open]) {
        BOOL res = [[BESTAccountsManager sharedManager] createTable];
        
        if (!res) {
            NSLog(@"create table Accounts failed!");
        }
    }
}

// 创建数据库
- (BOOL)createTable {
    NSString *sql = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS ‘Account‘(‘id‘ PRIMARY KEY AUTOINCREMENT NOT NULL, ‘UserName‘ TEXT NOT NULL, ‘Password‘ TEXT NOT NULL, ‘Host‘ TEXT NOT NULL)"];
    
    return [_db executeUpdate:sql];
}

// 增
- (void)insertAccountItem:(BESTAccountItem *)item {
    if ([_db open]) {
        NSString *sql = [NSString stringWithFormat:@"INSERT INTO ‘Account‘ (‘UserName‘, ‘Password‘, ‘Host‘) VALUES (‘%@‘, ‘%@‘, ‘%@‘)", item.userName, item.password, item.host];
        BOOL res = [_db executeUpdate:sql];
        if (res) {
            NSLog(@"insert account item succeed!");
        } else {
            NSLog(@"insert account item failed!");
        }
    }
    [_db close];
}

// 删
- (void)deleteAccountItem:(BESTAccountItem *)item {
    if ([_db open]) {
        NSString *sql = [NSString stringWithFormat:@"DELETE FROM ‘Account‘ WHERE ‘UserName‘ = ‘%@‘ AND ‘Host‘ = ‘%@‘", item.userName, item.host];
        BOOL res = [_db executeUpdate:sql];
        if (res) {
            NSLog(@"delete account item succeed!");
        } else {
            NSLog(@"delete account item failed!");
        }
    }
    [_db close];
}

// 改
- (void)updataAccountItem:(BESTAccountItem *)item {
    if ([_db open]) {
        NSString *sql = [NSString stringWithFormat:@"UPDATE ‘Account‘ SET ‘Password‘ = ‘%@‘ WHERE ‘UserName‘ = ‘%@‘ AND ‘Host‘ = ‘%@‘", item.password, item.userName, item.host];
        BOOL res = [_db executeUpdate:sql];
        if (res) {
            NSLog(@"update account item succeed!");
        } else {
            NSLog(@"update account item failed!");
        }
    }
    [_db close];
}

// 查
- (NSArray *)queryAccountItems {
    NSMutableArray *accounts = [NSMutableArray array];
    if ([_db open]) {
        NSString *sql = [NSString stringWithFormat:@"SELECT * FROM ‘Account‘"];
        FMResultSet *set = [_db executeQuery:sql];
        while ([set next]) {
            BESTAccountItem *item = [[BESTAccountItem alloc] init];
            item.userName = [set stringForColumn:@"UserName"];
            item.password = [set stringForColumn:@"Password"];
            item.host = [set stringForColumn:@"Host"];
            [accounts addObject:item];
        }
    }
    [_db close];
    
    return accounts;
}

时间: 2024-08-09 06:17:59

iOS FMDB的使用的相关文章

iOS Fmdb数据存储

fmdb经常用到,我感觉学习程序的人都会用到数据存储,可是每个语言开发用到的数据库理论是一样的,都是增,删,改,查,ios经常用到fmdb, 1.先实例化一个 #import <Foundation/Foundation.h> #import "FMDatabase.h" @interface LNFmdbDate : NSObject @property (nonatomic ,strong)FMDatabase *db; @end #import "LNFmd

IOS FMDB 使用

IOS开发中如果用Sqlite库来写数据库会比较麻烦,FMDB是对sqlite的封装,有更加友好简洁的的语句. 1,FMDB下载地址:FMDB下载地址 2,导入src下的文件,使用时 #import "FMDatabase.h" 3,创建数据库 #define kDocDir [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] #define

iOS FMDB 不需要关闭

以前做了一个应用,里面用到了FMDB,进行每一次操作前,都open,完成操作后都close.因为我是参考他们以前的代码.程序初期没发现什么问题,程序完成后,各种卡顿就出现了!即使我是放在新线程里操作的.仔细检查后发现,程序用在open 和 close上的cpu占有率异常地高,尤其是快速操作进行测试时.后来我查到了下面的帖子,原来,用错了! http://stackoverflow.com/questions/15720272/when-to-close-sqlite-database-using

IOS:FMDB使用databaseQueue实现数据库操作线程安全

sqlite数据库是ios开发中经常使用到的数据持久化方案,因为项目需求的不同,对数据库操作的要求也不同. 由于最近使用sqlite时,有一些地方需要频繁的更新,这时在多线程操作时,其他线程访问数据库会造成程序崩溃,因为之前的框架里设计的数据库管理工具类采用的是单例模式,这样在多线程操作同一个数据库时很容易引起冲突,导致程序崩溃,所以开始寻找多线程下线程安全的办法. 其实FMDB本身已经对多线程做了考虑,FMDatabaseQueue就是为了解决数据库操作线程安全的,只是由于之前框架集成的单例操

ios FMDB类库的使用 学习笔记

文章摘自:  文顶顶 iOS开发数据库篇-FMDB简单介绍 什么是FMDB FMDB是ios平台的sqlite数据库框架 FMBD以oc的方式封装了sqlite的c语言API FMDB的优点 使用起来更加面向对象,省去了很多麻烦.冗余的c语言代码 比苹果的core Data框架,更加轻量级和灵活 提供了多线程安全的数据库操作方法,有效地防止数据混乱 FMDB的github地址 https://github.com/ccgus/fmdb 核心类 FMDB有三个主要的类 1.FMDatabase 一

iOS FMDB--UIImage的插入与读取

1:先倒入FMDB 保存图片 #import "BaseViewController.h" #import "FMDatabase.h" #import "FMDatabaseQueue.h" #import "PPCamaraUtil.h" #import "SecondViewController.h" static const NSString *[email protected]"Base

iOS FMDB

FMDB 用到了sqlite3 中的一些语法  这里有sqlite的一些借鉴语法 http://www.runoob.com/sqlite/sqlite-data-types.html (使用前准备工作,通过cocoapod 或者在github上down一份 FMDB第三方的库  https://github.com/ccgus/fmdb, 然后:添加库) 使用步骤: 1.创建数据库(如果没有数据库的情况) 2.打开数据库(每次操作前都必须保证数据库是打开状态) 3.创建一张保存数据的表(用于保

IOS FMDB模糊查询

http://blog.sina.com.cn/s/blog_9630f1310101fx1d.html /查询记录 -(NSArray*)selectitemDream_desc:(JiemengSimple *)item { NSString *sql = [NSString stringWithFormat:@"SELECT * FROM pinyinSimple WHERE alpha like '%@%%'",item.dream_keyword];//模糊查询,查找alph

iOS - FMDB数据库的使用

下面不废话了直接上代码??/* 首先把FMDB拖入到工程中,需要我们把sqlite3这个库导入工程,(若是非ARC的工程,我们可以直接导入就好) 数据库-->操作大量的有规律的数据 FMDB是别人在系统数据库的繁琐的基础上给又封装了一下,供我们使用,-->相比于系统数据库更简单,好用 FMDatabase 主要是提供操作时用得sql语句 FMDatabaseAdditions.h 只要是负责多线程或是查询时更新时的操作 FMDBResultSet 结果集,对数据库的操作,返回结果 */ //创