WCDB簡(jiǎn)介
WCDB 是騰訊開(kāi)源的移動(dòng)數(shù)據(jù)庫(kù)框架倡怎,官網(wǎng):https://github.com/Tencent/wcdb踢械。和fmdb相比,主要是它支持ORM绽诚,用c++編寫的典徊,效率更高并且還是跨平臺(tái)的,既可以在iOS上使用也可以在Android上使用恩够。
基本使用的步驟
使用Cocoapods 安裝卒落,pod ‘WCDB’,其他安裝方式請(qǐng)參考https://github.com/Tencent/wcdb/wiki
1蜂桶、創(chuàng)建數(shù)據(jù)庫(kù)
- (WCTDatabase *)database {
? ? static WCTDatabase *db = nil;
? ? static dispatch_once_t onceToken;
? ? dispatch_once(&onceToken, ^{
? ? ? ? NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
? ? ? ? db = [[WCTDatabase alloc] initWithPath:[docDir stringByAppendingPathComponent:@"my_db"]];
? ? ? ? if ([db canOpen]) {
? ? ? ? ? ? [db createTableAndIndexesOfName:@"user" withClass:[DBModel class]];
? ? ? ? ? ? //如果表不存在就創(chuàng)建表儡毕,如果字段有更新,就更新表扑媚,所以不用判斷是否已經(jīng)存在該表
? ? ? ? }
? ? });
? ? _database = db;
? ? return _database;
}
2腰湾、新增數(shù)據(jù)
DBModel *model = [[DBModel alloc] init];
? model.isAutoIncrement = YES; // 如果你的模型里使用了WCDB_PRIMARY_AUTO_INCREMENT,就要把該屬性設(shè)置為YES疆股,否則會(huì)報(bào)錯(cuò)
? ? model.age = age;
? ? model.name = name;
? ? if ([self.database insertObject:model into:@"user"]) {
? ? ? ? [_dataArray addObject:model];
? ? }
3檐盟、刪除數(shù)據(jù),其中user_id被定義為自增的主鍵
[self.database deleteObjectsFromTable:@"user" where:DBModel.user_id.is(model.user_id)]
4押桃、修改數(shù)據(jù)
model.age = age;
? model.name = name;
? ?if ([self.database updateAllRowsInTable:@"user" onProperties:{DBModel.age ,DBModel.name} withObject:model]) {
? ? ? ? ? ? NSLog(@"修改成功");
? ? ? ? }
5葵萎、查詢數(shù)據(jù)
[self.database getAllObjectsOfClass:DBModel.class fromTable:@"user"];//查詢所有
[self.database getOneObjectOfClass:DBModel.class fromTable:@"user" where:DBModel.user_id.is(1)];//按條件查詢
6、高級(jí)api介紹
?//getAllObjectsOnResults表示只查詢某幾個(gè)字段的值唱凯,但是返回的對(duì)象還是模型數(shù)組
? ? NSArray? *names= [self.database getAllObjectsOnResults:{DBModel.name} fromTable:@"user"];
? ? //getOneRowOnResults返回的是該屬性的值的數(shù)組
? ? WCTOneRow *oneRow=? [self.database getOneRowOnResults:{DBModel.name} fromTable:@"user"];
? ? //AnyProperty.count()?查詢表的數(shù)據(jù)條數(shù)
? ? id?count=? [self.database getOneValueOnResult:DBModel.AnyProperty.count() fromTable:@"user"];
? ? //getOneObjectOfClass羡忘,返回表中的第一個(gè)模型對(duì)象
? ? id?obj =? [self.database getOneObjectOfClass:DBModel.class fromTable:@"user"];
? ? //getAllRowsOnResults返回二維數(shù)組,其中每個(gè)數(shù)組的對(duì)象包含的是每個(gè)字段的值
? ? WCTColumnsXRows *row =? [self.database getAllRowsOnResults:{DBModel.name,DBModel.age} fromTable:@"user"];
模型的定義
模型需遵循WCTTableCoding協(xié)議
@interface DBModel : NSObject <WCTTableCoding>
@property int user_id;
@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) NSInteger age;
WCDB_PROPERTY(user_id)
WCDB_PROPERTY(name)
WCDB_PROPERTY(age)
@end
@implementation DBModel WCDB_IMPLEMENTATION(DBModel) WCDB_SYNTHESIZE(DBModel, name) WCDB_SYNTHESIZE(DBModel, age) WCDB_SYNTHESIZE(DBModel, user_id) WCDB_PRIMARY_AUTO_INCREMENT(DBModel, user_id)
使用起來(lái)覺(jué)得挺方便的磕昼!比f(wàn)mdb優(yōu)雅卷雕。