当前位置: 首页 > 工具软件 > WCDB > 使用案例 >

iOS 上使用 WCDB

茅昀
2023-12-01

WCDB简介

WCDB 是腾讯开源的移动数据库框架,官网:https://github.com/Tencent/wcdb。
和fmdb相比,主要是它支持ORM,用c++编写的,效率更高并且还是跨平台的,既可以在iOS上使用也可以在Android上使用。

安装

使用Cocoapods 安装,pod ‘WCDB’,其他安装方式请参考https://github.com/Tencent/wcdb/wiki

使用

1、在ORM中,一个模型类对应一张表,一个类对象对应表里的一条数据,属性对应表里字段,先新建一个用户的模型类,如下:

DBModel.h
#import <Foundation/Foundation.h>
#import <WCDB/WCDB.h>

NS_ASSUME_NONNULL_BEGIN

@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

NS_ASSUME_NONNULL_END

//DBModel.m

#import "DBModel.h"

@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)

- (NSString *)description
{
    return [NSString stringWithFormat:@"姓名:%@ 年龄:%@", self.name,@(self.age)];
}

@end

2、创建数据库,创建一个user表

- (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]];
            //如果表不存在就创建表,如果字段有更新,就更新表,所以不用判断是否已经存在该表
        }
    });
    _database = db;
    return _database;
}

增:

    DBModel *model = [[DBModel alloc] init];
    model.isAutoIncrement = YES; // 如果你的模型里使用了WCDB_PRIMARY_AUTO_INCREMENT,就要把该属性设置为YES,否则会报错
    model.age = age;
    model.name = name;
    if ([self.database insertObject:model into:@"user"]) {
        [_dataArray addObject:model];
    }

删:

[self.database deleteObjectsFromTable:@"user" where:DBModel.user_id.is(model.user_id)]

改:

       model.age = age;
        model.name = name;
        //因为user_id 是主键,有唯一性,修改的时候如果使用DBModel.AllProperties,会报错,使用{}把需要修改的属性括起来就可以了
        if ([self.database updateAllRowsInTable:@"user" onProperties:{DBModel.age ,DBModel.name} withObject:model]) {
            NSLog(@"修改成功");
        }

查:

[self.database getAllObjectsOfClass:DBModel.class fromTable:@"user"];//查询所有
[self.database getOneObjectOfClass:DBModel.class fromTable:@"user" where:DBModel.user_id.is(1)];//按条件查询

具体项目地址:https://github.com/hxcshr/awesome_ios_test

 类似资料: