FMDATABASE的一些基本操作小结

#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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值