• iOS中FMDB的使用【单例】


    DYDB.h
    Objective-C
    12345678910111213141516
    
    
                  
    #import <Foundation/Foundation.h>
    #import <FMDB/FMDatabase.h>
    @interface DYDB : NSObject {
    }
    @property(nonatomic, readonly) FMDatabase *database;
    + (DYDB *) sharedDB;
    - (FMDatabase *) connect;
    - (void) clearDB;
    @end
    DYDB.m
    Objective-C
    1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
    
    
                  
    #import “DYDB.h”
    #define kDYDBObvName @”dyobv.sqlite”
    @implementation DYDB
    static DYDB *_sharedDB;
    + (DYDB *) sharedDB {
    if (!_sharedDB) {
    _sharedDB = [[DYDB alloc] init];
    }
    return _sharedDB;
    }
    - (id) init {
    self = [super init];
    if (self) {
    NSString* docsdir = [NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *dbpath = [docsdir stringByAppendingPathComponent:kDYDBObvName];
    DLog(@”database file path: %@”, dbpath);
    _database = [FMDatabase databaseWithPath:dbpath];
    }
    return self;
    }
    - (FMDatabase *) connect {
    if ([_database open]) {
    return _database;
    }
    DLog(@”fail to open db…”);
    return nil;
    }
    - (void) clearDB {
    dispatch_async(dispatch_get_main_queue(), ^{
    if([_database close]) {
    _database = nil;
    }
    });
    }
    @end
    DYLogKeeper+DB.h
    Objective-C
    1234567891011121314151617181920
    
    
                  
    #import “DYLogKeeper.h”
    #import <FMDB/FMDatabase.h>
    DYLogKeeper * rs2logkeeper(FMResultSet *rs);
    @interface DYLogKeeper (DB)
    + (void) createSqliteTable;
    + (BOOL) insert: (DYLogKeeper *) logkeeper;
    + (BOOL) updateContent: (NSString *) content localId: (NSString *) localId;
    + (BOOL) remove: (DYLogKeeper *) logkeeperId;
    + (DYLogKeeper *) findById: (NSString *) localId;
    + (NSArray *) findOfStartDate: (NSDate *) start toDate:(NSDate *) toDate;
    @end
    DYLogKeeper+DB.m
    Objective-C
    123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
    
    
                  
    #import “DYLogKeeper+DB.h”
    #import “DYDB.h”
    #import <FMDB/FMDatabase.h>
    #import “DYUUID.h”
    #import “NSDate+NSDateFormaterCategory.h”
    DYLogKeeper * rs2logkeeper(FMResultSet *rs) {
    DYLogKeeper *obj = [[DYLogKeeper alloc] init];
    obj.localId = [rs stringForColumn:@”local_id”];
    obj.logkeeperId = [rs stringForColumn:@”logkeeper_id”];
    obj.addtime = [rs dateForColumn:@”add_time”];
    obj.content = [rs stringForColumn:@”content”];
    obj.deviceId = [rs stringForColumn:@”device_id”];
    obj.deviceType = [rs intForColumn:@”device_type”];
    obj.channel = [rs intForColumn:@”channel”];
    return obj;
    }
    @implementation DYLogKeeper (DB)
    + (void) createSqliteTable {
    DLog(@”check table is exists?”);
    FMDatabase *db = [[DYDB sharedDB] connect];
    NSString *existsSql = [NSString stringWithFormat:@”select count(name) as countNum from sqlite_master where type = ‘table’ and name = ‘%@’”, @”log_keepers” ];
    DLog(@”%@”, existsSql);
    FMResultSet *rs = [db executeQuery:existsSql];
    if ([rs next]) {
    NSInteger count = [rs intForColumn:@”countNum”];
    DLog(@”The table count: %d”, count);
    if (count == 1) {
    DLog(@”log_keepers table is existed.”);
    return;
    }
    DLog(@”log_keepers is not existed.”);
    }
    [rs close];
    DLog(@”create table ….”);
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@”log_keepers_table” ofType:@”sql”];
    DLog(@”logkeeper sql file: %@”, filePath);
    NSError *error;
    NSString *sql = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];
    if (error != nil) {
    DLog(@”fail to read sql file: %@”, [error description]);
    return;
    }
    DLog(@”—sql: %@”, sql);
    DLog(@”execute sql ….”);
    if([db executeUpdate:sql]) {
    DLog(@”create table succes….”);
    } else {
    DLog(@”fail to execute update sql..”);
    }
    [db close];
    }
    + (BOOL) insert: (DYLogKeeper *) logkeeper {
    DLog(@”insert logkeeper”);
    DLog(@”convert int value to NSNumber …”);
    logkeeper.localId = [DYUUID uuidString];
    NSNumber *channelNum = [NSNumber numberWithInt:logkeeper.channel];
    DLog(@”— channelNum: %@”, channelNum);
    NSNumber *typeNumber = [NSNumber numberWithInt:logkeeper.deviceType];
    DLog(@”— deviceType: %@”, typeNumber);
    NSString *sql = @”insert into log_keepers(local_id, logkeeper_id, add_time, content, device_id, device_type, channel) values(?, ?, ?, ?, ?, ?, ?)”;
    FMDatabase *db = [[DYDB sharedDB] connect];
    if (db == nil) {
    DLog(@”fail to create db..”);
    }
    BOOL ret = [db executeUpdate:sql, logkeeper.localId, logkeeper.logkeeperId,
    logkeeper.addtime, logkeeper.content,
    logkeeper.deviceId, typeNumber, channelNum];
    [db close];
    return ret;
    }
    + (BOOL) updateContent:(NSString *)content
    localId: (NSString *)localId {
    DLog(@”update logkeeper content”);
    NSString *sql = @”update log_keepers set content = ? where local_id = ?”;
    FMDatabase *db = [[DYDB sharedDB] connect];
    BOOL ret = [db executeUpdate:sql, content, localId];
    [db close];
    return ret;
    }
    - (BOOL) remove: (DYLogKeeper *) logkeeper {
    DLog(@”remove logkeeper: %@”, logkeeper.localId);
    NSString *sql = @”delete from log_keepers where local_id = ?”;
    FMDatabase *db = [[DYDB sharedDB] connect];
    BOOL ret = [db executeUpdate:sql, logkeeper.localId];
    [db close];
    return ret;
    }
    - (DYLogKeeper *) findById:(NSString *)localId {
    DLog(@”find logkeeper by id: %@”, localId);
    FMDatabase *db = [[DYDB sharedDB] connect];
    FMResultSet *rs = [db executeQuery:@”select * from log_keepers where local_id = ?”, localId];
    DYLogKeeper *ret;
    if ([rs next]) {
    ret = rs2logkeeper(rs);
    }
    [db close];
    return ret;
    }
    + (NSArray *) findOfStartDate: (NSDate *) start toDate:(NSDate *) toDate {
    DLog(@”find logkeeper between date ….”);
    NSString *sql = @”select * from log_keepers where add_time between ? and ?”;
    FMDatabase *db = [[DYDB sharedDB] connect];
    FMResultSet *rs = [db executeQuery:sql, start, toDate];
    NSMutableArray *array = [NSMutableArray arrayWithCapacity:32];
    while ([rs next]) {
    DYLogKeeper *logkeeper = rs2logkeeper(rs);
    [array addObject:logkeeper];
    }
    [rs close];
    [db close];
    return array;
    }
    @end
    DYLogKeeper.h
    Objective-C
    1234567891011121314151617181920
    
    
                  
    #import <Foundation/Foundation.h>
    @interface DYLogKeeper : NSObject
    @property(strong, nonatomic) NSString *localId;
    @property(strong, nonatomic) NSDate *addtime;
    @property(strong, nonatomic) NSString *deviceId;
    @property(strong, nonatomic) NSString *content;
    @property(strong, nonatomic) NSString *logkeeperId;
    @property(nonatomic) int deviceType;
    @property(nonatomic) int channel;
    @end




  • 相关阅读:
    吴裕雄--天生自然JAVA开发JSP-SERVLET学习笔记:解决启动TOMCAT服务器乱码问题
    吴裕雄--天生自然JAVA开发JSP-SERVLET学习笔记:配置TOMCAT服务器
    吴裕雄--天生自然JAVA开发JSP-SERVLET学习笔记:修改服务器端口
    吴裕雄--天生自然JAVA开发JSP-SERVLET学习笔记:解决服务端口8080被占用的问题
    css 背景色渐变---和背景色透明
    nodePPT 这可能是迄今为止最好的网页版PPT
    正则表达式匹配
    WdatePicker.js 日历点击时,触发自定义方法 ,可以调用自己的函数。
    html 实时监控发送数据
    [转]使用onclick跳转到其他页面/跳转到指定url
  • 原文地址:https://www.cnblogs.com/suenihy/p/3525732.html
Copyright © 2020-2023  润新知