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

大家先去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. Git超级菜鸟学习--> 社区化协作以及分支操作

    1 先将主库的url添加到本地上面, git remote add <RepoName> <URL> 2 获取主库的修改记录 git fetch --获取服务器上的修改 git ...

  2. char类型关联

    SQL> create table a1(id int,name char(10)); Table created. SQL> create table a2(id int,name ch ...

  3. linux远程管理工具

    一.常见的远程管理控制方式主要有以下几种 ①RDP(remote desktop protocol)协议 远程桌面协议,我们常用的windows操作系统就是的远程桌面管理就是基于该协议的. ②teln ...

  4. UValive 5713 Qin Shi Huang's National Road System

    Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/3 ...

  5. 《University Calculus》-chape5-积分法-积分的定义

    这一章节讨论积分的定义以及微积分基本定理. 笔者先前在数学证明专栏中关于高斯定理的证明的开头,给出了一段关于微积分思想的概括,文中提到根据导数(微分)的定义,根据其逆定义来给出积分的定义和计算方法,这 ...

  6. lightoj1057 - Collecting Gold (tsp问题)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1057 题目大意:在二维矩阵中,给你一个起点和至多15个的目标点.要你求出从起点出发经过 ...

  7. FastDfs 说明、安装、配置

    fastdfs是一个开源的,高性能的的分布式文件系统,他主要的功能包括:文件存储,同步和访问,设计基于高可用和负载均衡,fastfd非常适用于基于文件服务的站点,例如图片分享和视频分享网站 fastf ...

  8. Google Web Toolkit (GWT)怎么制作多个用户界面

    Google Web Toolkit即GWT是目前基于AJAX技术开发的一个比较成功的框架包,但是其附带例程中只有单页面的实例,那么应该怎么样制作多个页面呢? 其实很简单,GWT的一个模块,就是一个页 ...

  9. 你的Jsp页面有黄×么,有黄色问号么?Multiple annotations found at this line: - Invalid location of tag (form). - No

    jsp页面有黄色问号代表我们的html标签不符合规范 对于很多人拿到页面美工给的页面,有时候很多都有黄色的问号. 为什么会这样呢? Multiple annotations found at this ...

  10. Linux下对后台进程通过kill传递信号不起作用的问题

    在阅读APUE信号一章时,我遇到Linux下对后台进程通过kill传递信号不起作用的问题 具体情形与如下链接中的老兄一致: http://bbs.csdn.net/topics/390335913?p ...