iOS菜鳥之FMDB的二次封裝簡單易用


閑來無事寫點東西,希望大家多多指正!

大家先去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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM