iOS開發 資料存放區之WCDB的使用

來源:互聯網
上載者:User

一.類欄位綁定

在WCDB內,ORM(Object Relational Mapping)是指 將一個ObjC的類,映射到資料庫的表和索引; 將類的property,映射到資料庫表的欄位;

這一過程。通過ORM,可以達到直接通過Object進行資料庫操作,省去拼裝過程的目的。

WCDB通過內建的宏實現ORM的功能。如下:

建立一個Model:

.h檔案

#import<Foundation/Foundation.h>#import<WCDB/WCDB.h> // 要匯入WCDB//Message.h// 繼承WCTTableCoding@interface Message : NSObject/**資訊ID*/@property (nonatomic, assign) NSInteger messageId;/**資訊標題*/@property (nonatomic, strong) NSString *title;/**資訊建立時間*/@property (nonatomic, assign) NSInteger createTime;/**資訊內容*/@property (nonatomic, strong) NSString *content;/**資訊字數*/@property (nonatomic, assign) NSInteger count;// 實現WCTTableCoding代理WCDB_PROPERTY(messageId)WCDB_PROPERTY(title)WCDB_PROPERTY(createTime)WCDB_PROPERTY(content)WCDB_PROPERTY(count)@end

.mm檔案(這裡需要把.m檔案改為.mm檔案,因為WCDB是基於Objective-C++)

// Message.mm#import "Message.h"@implementation Message// 使用 WCDB_IMPLEMENTATIO 宏在類檔案定義綁定到資料庫表的類WCDB_IMPLEMENTATION(Message)// 使用 WCDB_SYNTHESIZE 宏在類檔案定義需要綁定到資料庫表的欄位WCDB_SYNTHESIZE(Message, messageId)WCDB_SYNTHESIZE(Message, title)WCDB_SYNTHESIZE(Message, createTime)WCDB_SYNTHESIZE(Message, content)WCDB_SYNTHESIZE(Message, count)// 用於定義主鍵WCDB_PRIMARY(Message, messageId)@end

將一個已有的ObjC類進行ORM綁定的過程如下: 定義該類遵循WCTTableCoding協議。可以在類聲明上定義,也可以通過檔案模版在category內定義。 使用WCDB_PROPERTY宏在標頭檔聲明需要綁定到資料庫表的欄位。 使用WCDB_IMPLEMENTATIO宏在類檔案定義綁定到資料庫表的類。 使用WCDB_SYNTHESIZE宏在類檔案定義需要綁定到資料庫表的欄位。

簡單幾行代碼,就完成了將類和需要的欄位綁定到資料庫表的過程。這三個宏在名稱和使用習慣上,也都和定義一個ObjC類相似,以此便於記憶。

除此之外,WCDB還提供了許多可選的宏,用於定義資料庫索引、約束等,如: WCDB_PRIMARY用於定義主鍵 WCDB_INDEX用於定義索引 WCDB_UNIQUE用於定義唯一約束 WCDB_NOT_NULL用於定義非空約束 ...

更多關於ORM定義,請參考:ORM使用教程

二.增刪改查(CRUD)

得益於ORM的定義,WCDB可以直接進行通過object進行增刪改查(CRUD)操作。開發人員可以通過WCTDatabase和WCTTable兩個類進行一般的增刪改查操作。

1.首先建立一個WCTDatabase

//獲得存放資料庫檔案的沙箱地址+ (NSString *)wcdbFilePath{    NSArray *filePath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);    NSString *documentPath = [filePath objectAtIndex:0];    NSString *dbFilePath = [documentPath stringByAppendingPathComponent:@"message.db"];    return dbFilePath;}//1.建立資料庫的操作+ (BOOL)creatDatabase{    database = [[WCTDatabase alloc] initWithPath:[self wcdbFilePath]];    if (![database isTableExists:TABLE_WCDB_NAME]) {        BOOL result = [database createTableAndIndexesOfName:TABLE_WCDB_NAME withClass:Message.class];        return result;    }    return YES;}

2.增

#pragma mark - 增+ (BOOL)insertData:(Message *)message{    if (message == nil) {        return NO;    }    if (database == nil) {        [self creatDatabase];    }    BOOL result = [database insertObject:message into:TABLE_WCDB_NAME];    return result;}+ (BOOL)insertDatas:(NSArray<Message *> *)messages{    if (database == nil) {        [self creatDatabase];    }    BOOL result = [database insertObjects:messages into:TABLE_WCDB_NAME];    return YES;}

3.刪

#pragma mark - 刪+ (BOOL)deleteDataWithId:(NSInteger)messageId{    if (database == nil) {        [self creatDatabase];    }    BOOL result = [database deleteObjectsFromTable:TABLE_WCDB_NAME where:Message.messageId == messageId];    return result;}+ (BOOL)deleteAllData{    if (database == nil) {        [self creatDatabase];    }    BOOL result = [database deleteAllObjectsFromTable:TABLE_WCDB_NAME];    return result;}

4.改

#pragma mark - 改+ (BOOL)updateData:(NSString *)content byId:(NSInteger)messageId{    if (database == nil) {        [self creatDatabase];    }    Message *message = [[Message alloc] init];    message.content = content;    BOOL result = [database updateRowsInTable:TABLE_WCDB_NAME onProperties:Message.content withObject:message where:Message.messageId == messageId];    return result;}+ (BOOL)updateData:(Message *)message{    if (database == nil) {        [self creatDatabase];    }    BOOL result = [database updateRowsInTable:TABLE_WCDB_NAME onProperties:Message.content withObject:message where:Message.messageId == message.messageId];    [database updateRowsInTable:TABLE_WCDB_NAME onProperties:Message.createTime withObject:message where:Message.messageId == message.messageId];    [database updateRowsInTable:TABLE_WCDB_NAME onProperties:Message.title withObject:message where:Message.messageId == message.messageId];    return result;}

5.查

#pragma mark - 查+ (NSArray<Message *> *)getAllData{    if (database == nil) {        [self creatDatabase];    }    return [database getAllObjectsOfClass:Message.class fromTable:TABLE_WCDB_NAME];}+ (NSArray<Message *> *)getData:(NSInteger)messageId{    if (database == nil) {        [self creatDatabase];     }    return [database getObjectsOfClass:Message.class fromTable:TABLE_WCDB_NAME where:Message.messageId == messageId];}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.