开源类库之二 (FMDataBase)

33 篇文章 0 订阅
32 篇文章 0 订阅

FMDataBase是iOS平台中一个非常强大的数据库类库,其将sqlite面向过程的接口以面向对象的方法展现出来,提供了极高的可用性。

其使用很简单,将sqlite 库添加到项目中,然后将FMDataBase类库文件添加到项目中,下面是对笔者对FMDataBase进行的一个二次封装,处理的数据库很简单,只有一张表,两个列,存储的都是一些key-value对,读者可以根据自身需要对此类进行修改。

[cpp]  view plain copy
  1. #import <Foundation/Foundation.h>  
  2. #import "FMDatabase.h"  
[cpp]  view plain copy
  1. @interface DBController : NSObject {  
  2. }  
  3.   
  4. @property (nonatomic, assign) FMDatabase *dataBase;  
  5.   
  6. +(BOOL)databaseExit;  
  7.   
  8. -(BOOL)initDatabase;  
  9.   
  10. -(void)closeDatabase;  
  11.   
  12. -(BOOL)deleteTable;  
  13.   
  14. -(BOOL)InsertTable:(NSString *)key_type value:(NSString *)key_value;  
  15.   
  16. -(BOOL)UpdataTable:(NSString *) valueStr key:(NSString *)keyStr;  
  17.   
  18. -(NSMutableDictionary *)querryTable;  
  19.   
  20. +(BOOL) deleteDataBase;  
  21.   
  22. @end  
  23.   
  24. @synthesize dataBase = _dataBase;  
  25.   
  26. - (id)init{  
  27.       
  28.     if(self = [super init]){  
  29.         _dataBase = [FMDatabase databaseWithPath: [DBController getPath]];  
  30.         if (![_dataBase open]) {  
  31.             NSLog(@"Create/Open dataBase %@ Failed!", [DBController getPath]);  
  32.         }   
  33.     }  
  34.     return self;  
  35. }  
  36.   
  37. //数据库是否存在  
  38. +(BOOL)databaseExit  
  39. {  
  40.     return [[NSFileManager defaultManager] fileExistsAtPath: [self getPath]];  
  41. }  
  42.   
  43.   
  44. //初始化数据库  
  45. -(BOOL)initDatabase{      
  46.     if ([DBController databaseExit]) {  
  47.         return [self createTable];  
  48.     }  
  49.     return NO;  
  50. }  
  51.   
  52.   
  53.   
  54. //创建数据库  
  55. -(BOOL)createTable  
  56. {  
  57.     return [self.dataBase executeUpdate: @"create table if not exists personTable(id integer primary key autoincrement, key text,value text);"];  
  58. }  
  59.   
  60. //删除数据表  
  61. -(BOOL)deleteTable{  
  62.     if ([DBController databaseExit]) {  
  63.         return [self.dataBase executeUpdate: [NSString stringWithFormat:@"drop table %@;",_PERSONINFO]];          
  64.     }  
  65.     return NO;  
  66. }  
  67.   
  68.   
  69.   
  70. //关闭数据库  
  71. - (void) closeDatabase  
  72. {  
  73.     [self.dataBase close];  
  74. }  
  75.   
  76. //插入数据  
  77. -(BOOL)InsertTable:(NSString *)key value:(NSString *)value  
  78. {  
  79.     if ([DBController databaseExit]) {  
  80.         BOOL result = NO;  
  81.         [self.dataBase beginTransaction];  
  82.         result = [self.dataBase executeUpdate:@"INSERT INTO personTable (key,value) VALUES (?,?)", key, value];  
  83.         [self.dataBase commit];  
  84.         return result;  
  85.     }  
  86.     return NO;  
  87. }  
  88.   
  89. //更新数据  
  90. -(BOOL)UpdataTable:(NSString *) valueStr key:(NSString *)keyStr  
  91. {  
  92.     if ([DBController databaseExit]) {  
  93.         BOOL result = NO;  
  94.         [self.dataBase beginTransaction];  
  95.         result = [self.dataBase executeUpdate:@"UPDATE personTable SET value=? WHERE key=?", valueStr, keyStr];  
  96.         [self.dataBase commit];  
  97.         return result;  
  98.     }  
  99.     return NO;  
  100. }  
  101.   
  102. //查询整个表  
  103. -(NSMutableDictionary *)querryTable  
  104. {  
  105.     NSMutableDictionary* resultDic = [[NSMutableDictionary alloc] init];  
  106.       
  107.     FMResultSet *rs = [self.dataBase executeQuery:@"select * from personTable"];  
  108.     while ([rs next]) {  
  109.         [resultDic setObject: [rs stringForColumn: @"value"] forKey: [rs stringForColumn: @"key"]];  
  110.     }  
  111.     return [resultDic autorelease];  
  112. }  
  113.   
  114. +(BOOL) deleteDataBase  
  115. {  
  116.     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  117.       
  118.     NSString *documentsDirectory = [paths objectAtIndex:0];  
  119.       
  120.     NSString *path = [documentsDirectory stringByAppendingPathComponent:_DBNAME];//设置数据库得路径  
  121.       
  122.     NSFileManager *fileManager = [NSFileManager defaultManager];  
  123.       
  124.     BOOL find = [fileManager fileExistsAtPath:path];  
  125.       
  126.     if (find) {  
  127.           
  128.         [fileManager removeItemAtPath: path error: nil];  
  129.           
  130.     }  
  131.     return find;  
  132. }  
  133.   
  134.   
  135. - (void)dealloc {  
  136.     [_dataBase close];  
  137.     _dataBase = nil;  
  138.     [super dealloc];  
  139. }  
  140.   
  141. + (NSString*) getPath {  
  142.     // 打开的数据库  
  143.     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  144.       
  145.     NSString *documentsDirectory = [paths objectAtIndex:0];  
  146.       
  147.     return [documentsDirectory stringByAppendingPathComponent:_DBNAME];//设置数据库得路径  
  148. }  
  149.   
  150.   
  151. @end  
### 回答1: 继承开源类库中的类,并重写其中的类方法算作对开源类库进行修改。这是否会破坏开源使用许可,取决于你使用的开源许可证。有些开源许可证允许修改和使用代码,但要求在使用时标注来源并遵守其他限制。有些开源许可证要求在使用修改后的代码时使用相同的许可证,这意味着你必须将你修改的代码开源。因此,在修改开源类库之前,应该仔细阅读开源许可证,了解其中的限制和要求。 ### 回答2: 继承开源类库中的类,并重写其中的类方法属于对开源类库的扩展和定制化,不属于对开源类库的直接修改。这种方式并不会破坏开源使用许可。 开源许可通常允许用户自由地修改和扩展开源代码,只要遵守开源许可的要求即可。继承开源类库中的类可以被视为对开源代码的扩展,而不是对原始代码的直接修改。 通过继承并重写类方法,我们可以定制开源类库以满足自己的需求,同时保持开源代码的完整性。这种方式在开源社区中被广泛接受,并且经常被使用。 然而,在进行继承和重写时,我们需要注意遵守开源类库的许可要求。通常来说,我们需要遵循开源许可的要求,包括在继承和重写的代码中保持原始开源许可的声明,并在适当的地方注意提及对原始开源类库的使用。 总结起来,继承开源类库中的类,并重写其中的类方法不算修改开源类库,而是对其进行定制化;这种方式不会破坏开源使用许可,只要我们遵守开源许可的要求即可。在进行此类操作时,我们应该保持对原始开源类库的尊重,并遵循开源许可的规定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值