Warrior Sun

内蒙古强网电子科技有限公司

导航

iOS中FMDB的使用【单例】

Posted on 2014-01-19 10:03  Warrior Sun  阅读(686)  评论(0编辑  收藏  举报
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: \n %@”, 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