仅供自己记录使用,
h文件
#import <Foundation/Foundation.h> #import "FMDatabase.h" #import "FMDatabaseAdditions.h" @interface wiDBRoot : NSObject @property (retain, nonatomic) FMDatabase *DB; @property (retain, nonatomic) NSString *DBName; //+ (id)modelWithDBName:(NSString *)dbName; - (id)initWithDBName:(NSString *)dbName; // 删除数据库 - (void)deleteDatabse; // 数据库存储路径 //- (NSString *)getPath:(NSString *)dbName; // 打开数据库 - (void)readyDatabse; // 判断是否存在表 - (BOOL) isTableOK:(NSString *)tableName; // 获得表的数据条数 - (BOOL) getTableItemCount:(NSString *)tableName; // 创建表 - (BOOL) createTable:(NSString *)tableName withArguments:(NSString *)arguments; // 删除表-彻底删除表 - (BOOL) deleteTable:(NSString *)tableName; // 清除表-清数据 - (BOOL) eraseTable:(NSString *)tableName; // 插入数据 - (BOOL)insertTable:(NSString*)sql, ...; // 修改数据 - (BOOL)updateTable:(NSString*)sql, ...; // 整型 - (NSInteger)getDb_Integerdata:(NSString *)tableName withFieldName:(NSString *)fieldName; // 布尔型 - (BOOL)getDb_Booldata:(NSString *)tableName withFieldName:(NSString *)fieldName; // 字符串型 - (NSString *)getDb_Stringdata:(NSString *)tableName withFieldName:(NSString *)fieldName; // 二进制数据型 - (NSData *)getDb_Bolbdata:(NSString *)tableName withFieldName:(NSString *)fieldName; @end
#import "wiDBRoot.h" @interface wiDBRoot () - (NSString *)getPath:(NSString *)dbName; @end @implementation wiDBRoot @synthesize DB; @synthesize DBName; /* + (id)modelWithDBName:(NSString *)dbName { [[[self alloc] initWithDBName:dbName] autorelease]; return self; } */ - (id)initWithDBName:(NSString *)dbName { self = [super init]; if(nil != self) { DBName = [self getPath:dbName]; WILog(@"DBName: %@", DBName); } return self; } - (void)dealloc { [DB close]; [DB release]; [DBName release]; [super dealloc]; } // 数据库存储路径(内部使用) - (NSString *)getPath:(NSString *)dbName { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; return [documentsDirectory stringByAppendingPathComponent:dbName]; } // 打开数据库 - (void)readyDatabse { //BOOL success; //NSError *error; //NSFileManager *fileManager = [NSFileManager defaultManager]; //success = [fileManager fileExistsAtPath:self.DBName]; if ([DB databaseExists]) return; //DB = [FMDatabase databaseWithPath:DBName]; DB = [[FMDatabase alloc] initWithPath:DBName]; if (![DB open]) { [DB close]; NSAssert1(0, @"Failed to open database file with message '%@'.", [DB lastErrorMessage]); } // kind of experimentalish. [DB setShouldCacheStatements:YES]; } #pragma mark 删除数据库 // 删除数据库 - (void)deleteDatabse { BOOL success; NSError *error; NSFileManager *fileManager = [NSFileManager defaultManager]; // delete the old db. if ([fileManager fileExistsAtPath:DBName]) { [DB close]; success = [fileManager removeItemAtPath:DBName error:&error]; if (!success) { NSAssert1(0, @"Failed to delete old database file with message '%@'.", [error localizedDescription]); } } } // 判断是否存在表 - (BOOL) isTableOK:(NSString *)tableName { FMResultSet *rs = [DB executeQuery:@"SELECT count(*) as 'count' FROM sqlite_master WHERE type ='table' and name = ?", tableName]; while ([rs next]) { // just print out what we've got in a number of formats. NSInteger count = [rs intForColumn:@"count"]; WILog(@"isTableOK %d", count); if (0 == count) { return NO; } else { return YES; } } return NO; } // 获得表的数据条数 - (BOOL) getTableItemCount:(NSString *)tableName { NSString *sqlstr = [NSString stringWithFormat:@"SELECT count(*) as 'count' FROM %@", tableName]; FMResultSet *rs = [DB executeQuery:sqlstr]; while ([rs next]) { // just print out what we've got in a number of formats. NSInteger count = [rs intForColumn:@"count"]; WILog(@"TableItemCount %d", count); return count; } return 0; } // 创建表 - (BOOL) createTable:(NSString *)tableName withArguments:(NSString *)arguments { NSString *sqlstr = [NSString stringWithFormat:@"CREATE TABLE %@ (%@)", tableName, arguments]; if (![DB executeUpdate:sqlstr]) //if ([DB executeUpdate:@"create table user (name text, pass text)"] == nil) { WILog(@"Create db error!"); return NO; } return YES; } // 删除表 - (BOOL) deleteTable:(NSString *)tableName { NSString *sqlstr = [NSString stringWithFormat:@"DROP TABLE %@", tableName]; if (![DB executeUpdate:sqlstr]) { WILog(@"Delete table error!"); return NO; } return YES; } // 清除表 - (BOOL) eraseTable:(NSString *)tableName { NSString *sqlstr = [NSString stringWithFormat:@"DELETE FROM %@", tableName]; if (![DB executeUpdate:sqlstr]) { WILog(@"Erase table error!"); return NO; } return YES; } // 插入数据 - (BOOL)insertTable:(NSString*)sql, ... { va_list args; va_start(args, sql); BOOL result = [DB executeUpdate:sql error:nil withArgumentsInArray:nil orVAList:args]; va_end(args); return result; } // 修改数据 - (BOOL)updateTable:(NSString*)sql, ... { va_list args; va_start(args, sql); BOOL result = [DB executeUpdate:sql error:nil withArgumentsInArray:nil orVAList:args]; va_end(args); return result; } // 暂时无用 #pragma mark 获得单一数据 // 整型 - (NSInteger)getDb_Integerdata:(NSString *)tableName withFieldName:(NSString *)fieldName { NSInteger result = NO; NSString *sql = [NSString stringWithFormat:@"SELECT %@ FROM %@", fieldName, tableName]; FMResultSet *rs = [DB executeQuery:sql]; if ([rs next]) result = [rs intForColumnIndex:0]; [rs close]; return result; } // 布尔型 - (BOOL)getDb_Booldata:(NSString *)tableName withFieldName:(NSString *)fieldName { BOOL result; result = [self getDb_Integerdata:tableName withFieldName:fieldName]; return result; } // 字符串型 - (NSString *)getDb_Stringdata:(NSString *)tableName withFieldName:(NSString *)fieldName { NSString *result = NO; NSString *sql = [NSString stringWithFormat:@"SELECT %@ FROM %@", fieldName, tableName]; FMResultSet *rs = [DB executeQuery:sql]; if ([rs next]) result = [rs stringForColumnIndex:0]; [rs close]; return result; } // 二进制数据型 - (NSData *)getDb_Bolbdata:(NSString *)tableName withFieldName:(NSString *)fieldName { NSData *result = NO; NSString *sql = [NSString stringWithFormat:@"SELECT %@ FROM %@", fieldName, tableName]; FMResultSet *rs = [DB executeQuery:sql]; if ([rs next]) result = [rs dataForColumnIndex:0]; [rs close]; return result; } @end