iOS——基於模型化的sqlite操作庫CtDB的使用

思考者23發表於2018-01-18

一個sqlite操作庫

CtDB是一個基於sqlite實現的資料庫操作庫,其基本思想是通過模型與表一一對應來儘可能簡化資料庫操作。接下來以增刪改查操作來說明CtDB的使用。

引用

CtDB加入了CocoaPods支援。可以通過在Podfile檔案內新增以下語句加入支援。
pod 'CtDB', '~> 0.0.2'
複製程式碼

在通過CocoaPods引入了之後,在需要使用資料庫的介面引入

#import <CtDB.h>
複製程式碼

使用單例方法初始化一個CtDB物件,所有資料庫操作都基於CtDB物件

CtDB * ctDB = [CtDB shareDB];
複製程式碼

建表

建表無需書寫sqltie語句,CtDB也沒有暴露關於建表的函式,CtDB的資料庫操作基於模型類,在執行資料庫操作時會自動執行建表操作,因此要建表直接建立一個模型類。這裡建立一個TestModel類,注意模型類不可建立值為_id的屬性。
#import <Foundation/Foundation.h>

@interface TestModel : NSObject

@property (assign, nonatomic) NSInteger a;
@property (copy, nonatomic) NSString * b;

@end
複製程式碼

插入資料

CtDB插入函式為:
- (BOOL)insertTableWithData:(NSArray *)data;
複製程式碼

data引數為模型類,以TestModel為例,執行以下程式碼就可完成插入操作。

NSMutableArray * datas = [NSMutableArray arrayWithCapacity:42];
for (NSInteger index = 0; index < 20; index++) {
    TestModel * testModel = [[TestModel alloc]init];
    testModel.a = 2;
    testModel.b = @"test";
    [datas addObject:testModel];
}
[ctDB insertTableWithData:datas];
複製程式碼

需要注意的是,執行一次插入函式時,data資料內的型別必須相同,如果要插入不同型別的資料,請分開進行插入操作。

查詢資料

CtDB的查詢函式為:
- (NSArray *)selectTable:(Class)cla keys:(NSArray<NSString *> *)keys cons:(NSArray<NSString *> *)cons ords:(NSArray<NSString *> *)ords;
複製程式碼

cla代表要查詢的模型類,keys代表要查詢的欄位,cons代表查詢條件,ords代表排序條件,其中cons,ords分別提供了幾個函式書寫條件,

NSString * con_t(NSString * key, ConType type, NSString * value);
NSString * con_i(NSString * key, ConType type, NSInteger value);
NSString * con_d(NSString * key, ConType type, CGFloat value);

NSString * ord(NSString * key, OrdType type);
複製程式碼

當然,也可以使用sqlite語句中的條件,如條件語句可直接用"a > 2", "b = 'test'"等語句組合,排序語句可以直接用"a asc","b desc"等語句組合。
例如此刻要查詢TestModel表中所有a = 2的資料。

NSArray * array = [ctDB selectTable:[TestModel class] keys:nil cons:@[con_i(@"a", Con_Equal, 2)] ords:nil];
複製程式碼

這樣便得到了結果,selectTable函式會自動將結果模型化。 不過直接這樣查詢,將不會回饋資料的id,如果希望將資料的id一併返回,請讓模型類實現CtDBProtocol介面,通過indexKey方法回撥需要賦值id內容的屬性名。

更新資料

CtDB的更新函式為:
- (BOOL)updateTable:(Class)cla sets:(NSArray<NSString *> *)sets cons:(NSArray<NSString *> *)cons;
複製程式碼

sets代表要設定的內容,cons代表更新的條件,與cons類似,也提供了幾個寫條件的函式,當然可以直接寫"a = 2"之類的語句

NSString * set_t(NSString * key, NSString * value);
NSString * set_i(NSString * key, NSInteger value);
NSString * set_d(NSString * key, CGFloat value);
複製程式碼

例如,要將TestModel中所有a為2的內容的b都設為rr,只要這樣寫即可

[ctDB updateTable:[TestModel class] sets:@[set_t(@"b", @"rr")] cons:@[con_i(@"a", Con_Equal, 2)]];
複製程式碼

刪除資料

CtDB的刪除函式為
- (BOOL)deleteTable:(Class)cla cons:(NSArray<NSString *> *)cons;
複製程式碼

這裡的cons表達的是刪除條件,例如,要刪除TestModel中所有a為2的資料這樣寫即可

[ctDB deleteTable:[TestModel class] cons:@[con_i(@"a", Con_Equal, 2)]];
複製程式碼

這就是本庫目前所具有的功能,後續會完善更多功能,最後附上github地址

相關文章