iphone FMDB数据库(2)

来源:互联网 发布:淘宝客如何地推 编辑:程序博客网 时间:2024/05/21 13:18

h文件

[cpp] view plaincopyprint?
  1. #import <Foundation/Foundation.h>  
  2. #import "FMDatabase.h"  
  3. #import "FMDatabaseAdditions.h"  
  4.   
  5. @interface wiDBRoot : NSObject  
  6. @property (retain, nonatomic) FMDatabase *DB;  
  7. @property (retain, nonatomic) NSString *DBName;  
  8.   
  9. //+ (id)modelWithDBName:(NSString *)dbName;  
  10. - (id)initWithDBName:(NSString *)dbName;  
  11. // 删除数据库  
  12. - (void)deleteDatabse;  
  13.   
  14. // 数据库存储路径  
  15. //- (NSString *)getPath:(NSString *)dbName;  
  16. // 打开数据库  
  17. - (void)readyDatabse;  
  18.   
  19. // 判断是否存在表  
  20. - (BOOL) isTableOK:(NSString *)tableName;  
  21. // 获得表的数据条数  
  22. - (BOOL) getTableItemCount:(NSString *)tableName;  
  23. // 创建表  
  24. - (BOOL) createTable:(NSString *)tableName withArguments:(NSString *)arguments;  
  25. // 删除表-彻底删除表  
  26. - (BOOL) deleteTable:(NSString *)tableName;  
  27. // 清除表-清数据  
  28. - (BOOL) eraseTable:(NSString *)tableName;  
  29. // 插入数据  
  30. - (BOOL)insertTable:(NSString*)sql, ...;  
  31. // 修改数据  
  32. - (BOOL)updateTable:(NSString*)sql, ...;  
  33.   
  34.   
  35. // 整型  
  36. - (NSInteger)getDb_Integerdata:(NSString *)tableName withFieldName:(NSString *)fieldName;  
  37. // 布尔型  
  38. - (BOOL)getDb_Booldata:(NSString *)tableName withFieldName:(NSString *)fieldName;  
  39. // 字符串型  
  40. - (NSString *)getDb_Stringdata:(NSString *)tableName withFieldName:(NSString *)fieldName;  
  41. // 二进制数据型  
  42. - (NSData *)getDb_Bolbdata:(NSString *)tableName withFieldName:(NSString *)fieldName;  
  43.   
  44. @end  

m文件

[cpp] view plaincopyprint?
  1. #import "wiDBRoot.h"  
  2.   
  3. @interface wiDBRoot ()  
  4. - (NSString *)getPath:(NSString *)dbName;  
  5. @end  
  6.   
  7. @implementation wiDBRoot  
  8. @synthesize DB;  
  9. @synthesize DBName;  
  10.   
  11. /* 
  12. + (id)modelWithDBName:(NSString *)dbName 
  13. { 
  14.     [[[self alloc] initWithDBName:dbName] autorelease]; 
  15.     return self; 
  16. } 
  17. */  
  18.   
  19. - (id)initWithDBName:(NSString *)dbName  
  20. {  
  21.   
  22.     self = [super init];  
  23.       
  24.     if(nil != self)  
  25.     {  
  26.         DBName = [self getPath:dbName];  
  27.         WILog(@"DBName: %@", DBName);  
  28.     }  
  29.       
  30.     return self;  
  31. }  
  32.   
  33. - (void)dealloc {  
  34.     [DB close];  
  35.     [DB release];  
  36.     [DBName release];  
  37.     [super dealloc];  
  38. }  
  39.   
  40. // 数据库存储路径(内部使用)  
  41. - (NSString *)getPath:(NSString *)dbName  
  42. {  
  43.     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  44.     NSString *documentsDirectory = [paths objectAtIndex:0];  
  45.     return [documentsDirectory stringByAppendingPathComponent:dbName];  
  46. }  
  47.   
  48. // 打开数据库  
  49. - (void)readyDatabse  
  50. {  
  51.     //BOOL success;  
  52.     //NSError *error;  
  53.       
  54.     //NSFileManager *fileManager = [NSFileManager defaultManager];  
  55.     //success = [fileManager fileExistsAtPath:self.DBName];  
  56.       
  57.     if ([DB databaseExists])  
  58.         return;  
  59.       
  60.     //DB = [FMDatabase databaseWithPath:DBName];  
  61.     DB = [[FMDatabase alloc] initWithPath:DBName];  
  62.       
  63.     if (![DB open])  
  64.     {  
  65.         [DB close];  
  66.         NSAssert1(0, @"Failed to open database file with message '%@'.", [DB lastErrorMessage]);  
  67.     }  
  68.   
  69.     // kind of experimentalish.  
  70.     [DB setShouldCacheStatements:YES];  
  71. }  
  72.   
  73. #pragma mark 删除数据库  
  74. // 删除数据库  
  75. - (void)deleteDatabse  
  76. {  
  77.     BOOL success;  
  78.     NSError *error;  
  79.       
  80.     NSFileManager *fileManager = [NSFileManager defaultManager];  
  81.       
  82.     // delete the old db.  
  83.     if ([fileManager fileExistsAtPath:DBName])  
  84.     {  
  85.         [DB close];  
  86.         success = [fileManager removeItemAtPath:DBName error:&error];  
  87.         if (!success) {  
  88.             NSAssert1(0, @"Failed to delete old database file with message '%@'.", [error localizedDescription]);  
  89.         }  
  90.     }      
  91. }  
  92.   
  93. // 判断是否存在表  
  94. - (BOOL) isTableOK:(NSString *)tableName  
  95. {  
  96.     FMResultSet *rs = [DB executeQuery:@"SELECT count(*) as 'count' FROM sqlite_master WHERE type ='table' and name = ?", tableName];  
  97.     while ([rs next])  
  98.     {  
  99.         // just print out what we've got in a number of formats.  
  100.         NSInteger count = [rs intForColumn:@"count"];  
  101.         WILog(@"isTableOK %d", count);  
  102.           
  103.         if (0 == count)  
  104.         {  
  105.             return NO;  
  106.         }  
  107.         else  
  108.         {  
  109.             return YES;  
  110.         }  
  111.     }  
  112.   
  113.     return NO;  
  114. }  
  115.   
  116. // 获得表的数据条数  
  117. - (BOOL) getTableItemCount:(NSString *)tableName  
  118. {  
  119.     NSString *sqlstr = [NSString stringWithFormat:@"SELECT count(*) as 'count' FROM %@", tableName];  
  120.     FMResultSet *rs = [DB executeQuery:sqlstr];  
  121.     while ([rs next])  
  122.     {  
  123.         // just print out what we've got in a number of formats.  
  124.         NSInteger count = [rs intForColumn:@"count"];  
  125.         WILog(@"TableItemCount %d", count);  
  126.           
  127.         return count;  
  128.     }  
  129.       
  130.     return 0;  
  131. }  
  132.   
  133. // 创建表  
  134. - (BOOL) createTable:(NSString *)tableName withArguments:(NSString *)arguments  
  135. {  
  136.     NSString *sqlstr = [NSString stringWithFormat:@"CREATE TABLE %@ (%@)", tableName, arguments];  
  137.     if (![DB executeUpdate:sqlstr])  
  138.     //if ([DB executeUpdate:@"create table user (name text, pass text)"] == nil)  
  139.     {  
  140.         WILog(@"Create db error!");  
  141.         return NO;  
  142.     }  
  143.   
  144.     return YES;  
  145. }  
  146.   
  147. // 删除表  
  148. - (BOOL) deleteTable:(NSString *)tableName  
  149. {  
  150.     NSString *sqlstr = [NSString stringWithFormat:@"DROP TABLE %@", tableName];  
  151.     if (![DB executeUpdate:sqlstr])  
  152.     {  
  153.         WILog(@"Delete table error!");  
  154.         return NO;  
  155.     }  
  156.       
  157.     return YES;  
  158. }  
  159.       
  160. // 清除表  
  161. - (BOOL) eraseTable:(NSString *)tableName  
  162. {  
  163.     NSString *sqlstr = [NSString stringWithFormat:@"DELETE FROM %@", tableName];  
  164.     if (![DB executeUpdate:sqlstr])  
  165.     {  
  166.         WILog(@"Erase table error!");  
  167.         return NO;  
  168.         }  
  169.       
  170.     return YES;  
  171.     }      
  172.   
  173. // 插入数据  
  174. - (BOOL)insertTable:(NSString*)sql, ...  
  175. {  
  176.     va_list args;  
  177.     va_start(args, sql);  
  178.       
  179.     BOOL result = [DB executeUpdate:sql error:nil withArgumentsInArray:nil orVAList:args];  
  180.       
  181.     va_end(args);  
  182.     return result;  
  183. }  
  184.   
  185. // 修改数据  
  186. - (BOOL)updateTable:(NSString*)sql, ...  
  187. {  
  188.     va_list args;  
  189.     va_start(args, sql);  
  190.       
  191.     BOOL result = [DB executeUpdate:sql error:nil withArgumentsInArray:nil orVAList:args];  
  192.       
  193.     va_end(args);  
  194.     return result;  
  195. }  
  196.   
  197. // 暂时无用  
  198. #pragma mark 获得单一数据  
  199.   
  200. // 整型  
  201. - (NSInteger)getDb_Integerdata:(NSString *)tableName withFieldName:(NSString *)fieldName  
  202. {  
  203.     NSInteger result = NO;  
  204.       
  205.     NSString *sql = [NSString stringWithFormat:@"SELECT %@ FROM %@", fieldName, tableName];  
  206.     FMResultSet *rs = [DB executeQuery:sql];  
  207.     if ([rs next])  
  208.         result = [rs intForColumnIndex:0];  
  209.     [rs close];  
  210.       
  211.     return result;  
  212. }  
  213.   
  214. // 布尔型  
  215. - (BOOL)getDb_Booldata:(NSString *)tableName withFieldName:(NSString *)fieldName  
  216. {  
  217.     BOOL result;  
  218.   
  219.     result = [self getDb_Integerdata:tableName withFieldName:fieldName];  
  220.   
  221.     return result;  
  222. }  
  223.   
  224. // 字符串型  
  225. - (NSString *)getDb_Stringdata:(NSString *)tableName withFieldName:(NSString *)fieldName  
  226. {  
  227.     NSString *result = NO;  
  228.       
  229.     NSString *sql = [NSString stringWithFormat:@"SELECT %@ FROM %@", fieldName, tableName];  
  230.     FMResultSet *rs = [DB executeQuery:sql];  
  231.     if ([rs next])  
  232.         result = [rs stringForColumnIndex:0];  
  233.     [rs close];  
  234.   
  235.     return result;  
  236. }  
  237.   
  238. // 二进制数据型  
  239. - (NSData *)getDb_Bolbdata:(NSString *)tableName withFieldName:(NSString *)fieldName  
  240. {  
  241.     NSData *result = NO;  
  242.       
  243.     NSString *sql = [NSString stringWithFormat:@"SELECT %@ FROM %@", fieldName, tableName];  
  244.     FMResultSet *rs = [DB executeQuery:sql];  
  245.     if ([rs next])  
  246.         result = [rs dataForColumnIndex:0];  
  247.     [rs close];  
  248.       
  249.     return result;  
  250. }  
  251.   
  252. @end  

原创粉丝点击