闲来无事写点东西,希望大家多多指正!

大家先去git下载FMDB,然后将其中source文件夹中的fmdb文件夹拖入自己的项目中。最后就可以引用下面的代码对fmdb进行一次简单的封装。

这样可以更直观的使用数据库进行增删改操作。

/**

*  可以存储数据类型  text  integer  blob  boolean  date

*  keyTypes      存储的字段  以及对应数据类型

*  keyValues     存储的字段  以及对应的值

*/

#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>

#import "FMDB.h"

@interface YZKDBTool : NSObject

/**

*  数据库工具单例

*

*  @return 数据库工具对象

*/

+(YZKDBTool *)tool;

/**

*  创建数据库

*

*  @param dbName 数据库名称(带后缀.sqlite)

*/

-(FMDatabase *)getDBWithDBName:(NSString *)dbName;

/**

*  给指定数据库建表

*

*  @param db        指定数据库对象

*  @param tableName 表的名称

*  @param keyTypes   所含字段以及对应字段类型 字典

*/

-(void)DataBase:(FMDatabase *)db createTable:(NSString *)tableName keyTypes:(NSDictionary *)keyTypes;

/**

*  给指定数据库的表添加值

*

*  @param db        数据库名称

*  @param keyValues 字段及对应的值

*  @param tableName 表名

*/

-(void)DataBase:(FMDatabase *)db insertKeyValues:(NSDictionary *)keyValues intoTable:(NSString *)tableName;

/**

*  给指定数据库的表更新值

*

*  @param db        数据库名称

*  @param keyValues 要更新字段及对应的值

*  @param tableName 表名

*/

-(void)DataBase:(FMDatabase *)db updateTable:(NSString *)tableName setKeyValues:(NSDictionary *)keyValues;

/**

*  条件更新

*

*  @param db        数据库名称

*  @param tableName 表名称

*  @param keyValues 要更新的字段及对应值

*  @param condition 条件

*/

-(void)DataBase:(FMDatabase *)db updateTable:(NSString *)tableName setKeyValues:(NSDictionary *)keyValues whereCondition:(NSDictionary *)condition;

/**

*  查询数据库表中的所有值 限制数据条数10

*

*  @param db        数据库名称

*  @param keysTypes 查询字段以及对应字段类型 字典

*  @param tableName 表名称

*  @return 查询得到数据

*/

-(NSArray *)DataBase:(FMDatabase *)db selectKeyTypes:(NSDictionary *)keyTypes fromTable:(NSString *)tableName;

/**

*  条件查询数据库中的数据 限制数据条数10

*

*  @param db        数据库名称

*  @param keysTypes 查询字段以及对应字段类型 字典

*  @param tableName 表名称

*  @param condition 条件

*

*  @return 查询得到数据 限制数据条数10

*/

-(NSArray *)DataBase:(FMDatabase *)db selectKeyTypes:(NSDictionary *)keyTypes fromTable:(NSString *)tableName whereCondition:(NSDictionary *)condition;

/**

*  模糊查询 某字段以指定字符串开头的数据 限制数据条数10

*

*  @param db        数据库名称

*  @param keysTypes 查询字段以及对应字段类型 字典

*  @param tableName 表名称

*  @param key       条件字段

*  @param str       开头字符串

*

*  @return 查询所得数据 限制数据条数10

*/

-(NSArray *)DataBase:(FMDatabase *)db selectKeyTypes:(NSDictionary *)keyTypes fromTable:(NSString *)tableName whereKey:(NSString *)key beginWithStr:(NSString *)str;

/**

*  模糊查询 某字段包含指定字符串的数据 限制数据条数10

*

*  @param db        数据库名称

*  @param keysTypes 查询字段以及对应字段类型 字典

*  @param tableName 表名称

*  @param key       条件字段

*  @param str       所包含的字符串

*

*  @return 查询所得数据

*/

-(NSArray *)DataBase:(FMDatabase *)db selectKeyTypes:(NSDictionary *)keyTypes fromTable:(NSString *)tableName whereKey:(NSString *)key containStr:(NSString *)str;

/**

*  模糊查询 某字段以指定字符串结尾的数据 限制数据条数10

*

*  @param db        数据库名称

*  @param keysTypes 查询字段以及对应字段类型 字典

*  @param tableName 表名称

*  @param key       条件字段

*  @param str       结尾字符串

*

*  @return 查询所得数据

*/

-(NSArray *)DataBase:(FMDatabase *)db selectKeyTypes:(NSDictionary *)keyTypes fromTable:(NSString *)tableName whereKey:(NSString *)key endWithStr:(NSString *)str;

/**

*  清理指定数据库中的数据  (只删除数据不删除数据库)

*

*  @param db 指定数据库

*/

-(void)clearDatabase:(FMDatabase *)db from:(NSString *)tableName;

@end

#import "YZKDBTool.h"

static YZKDBTool *tool = nil;

@implementation YZKDBTool

+(YZKDBTool *)tool

{

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

if (tool == nil) {

tool = [[self alloc] init];

}

});

return tool;

}

+(instancetype)allocWithZone:(struct _NSZone *)zone

{

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

if (tool == nil) {

tool = [super allocWithZone:zone];

}

});

return tool;

}

#pragma mark --创建数据库

-(FMDatabase *)getDBWithDBName:(NSString *)dbName

{

NSArray *library = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);

NSString *dbPath = [library[0] stringByAppendingPathComponent:dbName];

NSLog(@"%@", dbPath);

FMDatabase *db = [FMDatabase databaseWithPath:dbPath];

if (![db open]) {

NSLog(@"无法获取数据库");

return nil;

}

return db;

}

#pragma mark --给指定数据库建表

-(void)DataBase:(FMDatabase *)db createTable:(NSString *)tableName keyTypes:(NSDictionary *)keyTypes

{

if ([self isOpenDatabese:db]) {

NSMutableString *sql = [[NSMutableString alloc] initWithString:[NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@ (",tableName]];

int count = 0;

for (NSString *key in keyTypes) {

count++;

[sql appendString:key];

[sql appendString:@" "];

[sql appendString:[keyTypes valueForKey:key]];

if (count != [keyTypes count]) {

[sql appendString:@", "];

}

}

[sql appendString:@")"];

//        NSLog(@"%@", sql);

[db executeUpdate:sql];

}

}

#pragma mark --给指定数据库的表添加值

-(void)DataBase:(FMDatabase *)db insertKeyValues:(NSDictionary *)keyValues intoTable:(NSString *)tableName

{

if ([self isOpenDatabese:db]) {

//        int count = 0;

//        NSString *Key = [[NSString alloc] init];

//        for (NSString *key in keyValues) {

//            if(count == 0){

//                NSMutableString *sql = [[NSMutableString alloc] initWithString:[NSString stringWithFormat:@"INSERT INTO %@ (%@) VALUES (?)",tableName, key]];

//                [db executeUpdate:sql,[keyValues valueForKey:key]];

//                Key = key;

//            }else

//            {

//                NSMutableString *sql = [[NSMutableString alloc] initWithString:[NSString stringWithFormat:@"UPDATE %@ SET %@ = ? WHERE %@ = ?", tableName, key, Key]];

//                [db executeUpdate:sql,[keyValues valueForKey:key],[keyValues valueForKey:Key]];

//            }

//            count++;

//        }

NSArray *keys = [keyValues allKeys];

NSArray *values = [keyValues allValues];

NSMutableString *sql = [[NSMutableString alloc] initWithString:[NSString stringWithFormat:@"INSERT INTO %@ (", tableName]];

NSInteger count = 0;

for (NSString *key in keys) {

[sql appendString:key];

count ++;

if (count < [keys count]) {

[sql appendString:@", "];

}

}

[sql appendString:@") VALUES ("];

for (int i = 0; i < [values count]; i++) {

[sql appendString:@"?"];

if (i < [values count] - 1) {

[sql appendString:@","];

}

}

[sql appendString:@")"];

NSLog(@"%@", sql);

[db executeUpdate:sql withArgumentsInArray:values];

}

}

#pragma mark --给指定数据库的表更新值

-(void)DataBase:(FMDatabase *)db updateTable:(NSString *)tableName setKeyValues:(NSDictionary *)keyValues

{

if ([self isOpenDatabese:db]) {

for (NSString *key in keyValues) {

NSMutableString *sql = [[NSMutableString alloc] initWithString:[NSString stringWithFormat:@"UPDATE %@ SET %@ = ?", tableName, key]];

[db executeUpdate:sql,[keyValues valueForKey:key]];

}

}

}

#pragma mark --条件更新

-(void)DataBase:(FMDatabase *)db updateTable:(NSString *)tableName setKeyValues:(NSDictionary *)keyValues whereCondition:(NSDictionary *)condition

{

if ([self isOpenDatabese:db]) {

for (NSString *key in keyValues) {

NSMutableString *sql = [[NSMutableString alloc] initWithString:[NSString stringWithFormat:@"UPDATE %@ SET %@ = ? WHERE %@ = ?", tableName, key, [condition allKeys][0]]];

[db executeUpdate:sql,[keyValues valueForKey:key],[keyValues valueForKey:[condition allKeys][0]]];

}

}

}

#pragma mark --查询数据库表中的所有值

-(NSArray *)DataBase:(FMDatabase *)db selectKeyTypes:(NSDictionary *)keyTypes fromTable:(NSString *)tableName

{

FMResultSet *result =  [db executeQuery:[NSString stringWithFormat:@"SELECT * FROM %@ LIMIT 10",tableName]];

return [self getArrWithFMResultSet:result keyTypes:keyTypes];

}

#pragma mark --条件查询数据库中的数据

-(NSArray *)DataBase:(FMDatabase *)db selectKeyTypes:(NSDictionary *)keyTypes fromTable:(NSString *)tableName whereCondition:(NSDictionary *)condition;

{

if ([self isOpenDatabese:db]) {

FMResultSet *result =  [db executeQuery:[NSString stringWithFormat:@"SELECT * FROM %@ WHERE %@ = ? LIMIT 10",tableName, [condition allKeys][0]], [condition valueForKey:[condition allKeys][0]]];

return [self getArrWithFMResultSet:result keyTypes:keyTypes];

}else

return nil;

}

#pragma mark --模糊查询 某字段以指定字符串开头的数据

-(NSArray *)DataBase:(FMDatabase *)db selectKeyTypes:(NSDictionary *)keyTypes fromTable:(NSString *)tableName whereKey:(NSString *)key beginWithStr:(NSString *)str

{

if ([self isOpenDatabese:db]) {

FMResultSet *result =  [db executeQuery:[NSString stringWithFormat:@"SELECT * FROM %@ WHERE %@ LIKE %@%% LIMIT 10",tableName, key, str]];

return [self getArrWithFMResultSet:result keyTypes:keyTypes];

}else

return nil;

}

#pragma mark --模糊查询 某字段包含指定字符串的数据

-(NSArray *)DataBase:(FMDatabase *)db selectKeyTypes:(NSDictionary *)keyTypes fromTable:(NSString *)tableName whereKey:(NSString *)key containStr:(NSString *)str

{

if ([self isOpenDatabese:db]) {

FMResultSet *result =  [db executeQuery:[NSString stringWithFormat:@"SELECT * FROM %@ WHERE %@ LIKE %%%@%% LIMIT 10",tableName, key, str]];

return [self getArrWithFMResultSet:result keyTypes:keyTypes];

}else

return nil;

}

#pragma mark --模糊查询 某字段以指定字符串结尾的数据

-(NSArray *)DataBase:(FMDatabase *)db selectKeyTypes:(NSDictionary *)keyTypes fromTable:(NSString *)tableName whereKey:(NSString *)key endWithStr:(NSString *)str

{

if ([self isOpenDatabese:db]) {

FMResultSet *result =  [db executeQuery:[NSString stringWithFormat:@"SELECT * FROM %@ WHERE %@ LIKE %%%@ LIMIT 10",tableName, key, str]];

return [self getArrWithFMResultSet:result keyTypes:keyTypes];

}else

return nil;

}

#pragma mark --清理指定数据库中的数据

-(void)clearDatabase:(FMDatabase *)db from:(NSString *)tableName

{

if ([self isOpenDatabese:db]) {

[db executeUpdate:[NSString stringWithFormat:@"DELETE FROM %@",tableName]];

}

}

#pragma mark --CommonMethod

-(NSArray *)getArrWithFMResultSet:(FMResultSet *)result keyTypes:(NSDictionary *)keyTypes

{

NSMutableArray *tempArr = [NSMutableArray array];

while ([result next]) {

NSMutableDictionary *tempDic = [NSMutableDictionary dictionary];

for (int i = 0; i < keyTypes.count; i++) {

NSString *key = [keyTypes allKeys][i];

NSString *value = [keyTypes valueForKey:key];

if ([value isEqualToString:@"text"]) {

//                字符串

[tempDic setValue:[result stringForColumn:key] forKey:key];

}else if([value isEqualToString:@"blob"])

{

//                二进制对象

[tempDic setValue:[result dataForColumn:key] forKey:key];

}else if ([value isEqualToString:@"integer"])

{

//                带符号整数类型

[tempDic setValue:[NSNumber numberWithInt:[result intForColumn:key]]forKey:key];

}else if ([value isEqualToString:@"boolean"])

{

//                BOOL型

[tempDic setValue:[NSNumber numberWithBool:[result boolForColumn:key]] forKey:key];

}else if ([value isEqualToString:@"date"])

{

//                date

[tempDic setValue:[result dateForColumn:key] forKey:key];

}

}

[tempArr addObject:tempDic];

}

return tempArr;

}

-(BOOL)isOpenDatabese:(FMDatabase *)db

{

if (![db open]) {

[db open];

}

return YES;

}

@end

iOS菜鸟之FMDB的二次封装简单易用的更多相关文章

  1. iOS菜鸟之AFN的二次封装

    我用一个单例类将一些常用的网络请求进行了二次封装,主要包括post请求 get请求  图片文件上传下载  视频的断点续传等功能. 首先大家先去github上下载AFN,将文件夹内的AFNetworki ...

  2. android菜鸟学习笔记22----ContentProvider(二)ContentObserver的简单使用

    现在有这样一个应用A通过ContentProvider提供自己的数据给其他应用,应用B通过ContentResolver获取应用A中提供的数据,并将其展示在ListView中,而应用C通过Conten ...

  3. FMDB 二次封装工具类,让你快速学会封装,集成数据库

    来源:StrivEver 链接:http://www.jianshu.com/p/4c77aee0b41c 上个版本为了增加用户体验,部分页面集成了离线缓存数据功能,于是就在项目里使用了数据库管理离线 ...

  4. Python实现Paramiko的二次封装

    Paramiko是一个用于执行SSH命令的Python第三方库,使用该库可实现自动化运维的所有任务,如下是一些常用代码的封装方式,多数代码为半成品,只是敲代码时的备份副本防止丢失,仅供参考,目前本人巡 ...

  5. ios MBProgressHUD 使用,及二次封装

    MBProgressHUD是一个显示HUD窗口的第三方类库,用于在执行一些后台任务时,在程序中显示一个表示进度的loading视图和两个可选的文本提示的HUD窗口.MBProgressHUD 二次封装 ...

  6. iOS项目相关@AFN&SDWeb的二次封装

    一,AFNetworking跟SDWebImge是功能强大且常用的第三方,然而在实际应用中需要封装用来复用今天就跟大家分享一下AFN&SDWeb的二次封装 1. HttpClient.h及.m ...

  7. 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)

    前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...

  8. iOS开发之微信聊天工具栏的封装

    之前山寨了一个新浪微博(iOS开发之山寨版新浪微博小结),这几天就山寨个微信吧.之前已经把微信的视图结构简单的拖了一下(IOS开发之微信山寨版),今天就开始给微信加上具体的实现功能,那么就先从微信的聊 ...

  9. iOS开发UI篇—核心动画(UIView封装动画)

    iOS开发UI篇—核心动画(UIView封装动画) 一.UIView动画(首尾) 1.简单说明 UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变时,UIView将为这些改变提供动画 ...

随机推荐

  1. hadoop-2.0.0-cdh4.2.1源码编译总结

    经过一个星期多的努力,这两个包的编译工作总算告一段落. 首先看一下这一篇文章: 在eclipse下编译hadoop2.0源码 http://www.cnblogs.com/meibenjin/arch ...

  2. 14.5.5.2 Deadlock Detection and Rollback Deadlock 检测和回滚

    14.5.5.2 Deadlock Detection and Rollback Deadlock 检测和回滚 InnoDB 自动检测事务死锁和回滚一个事务 InnoDB 尝试挑选小的事务来回滚,事务 ...

  3. translate函数使用

    SQL> select data,translate(data,'0123456789','##########') as num1, replace(translate(data,'01234 ...

  4. HDU-1225 Football Score

    http://acm.hdu.edu.cn/showproblem.php?pid=1225 一道超级简单的题,就因为我忘记写return,就wa好久,拜托我自己细心一点. 学习的地方:不过怎么查找字 ...

  5. poj 1704 Georgia and Bob(阶梯博弈)

    Georgia and Bob Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8656   Accepted: 2751 D ...

  6. Linux process state codes

    Here are the different values that the s, stat and state output specifiers (header "STAT" ...

  7. Self-numbers 2 - SGU 108

    翻译:引自 http://www.cnblogs.com/yylogo/archive/2011/06/09/SGU-108.html 在1949年印度的数学假D.R. Kaprekar发现了一种叫做 ...

  8. 1242Rescue (优先队列BFS)

    Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is ...

  9. UVA 424 (13.08.02)

     Integer Inquiry  One of the first users of BIT's new supercomputer was Chip Diller. Heextended his ...

  10. 公司开发的APP,如何生成一个二维码,供客户下载使用

    1.其实和简单,因为一般的用户使用扫一扫,大多数都是用微信自带的扫一扫工具 而,微信打开的二维码页面,会自动屏蔽apk文件,所以显然把apk的url生成一个二维码,让用户扫一扫就能直接下载,这样是行不 ...