將所有對象存到數據庫中

原帖地址

如果將字典或數組直接存儲在數據庫中,會將數組或字典轉化成字符串,所以可以使用歸檔與反歸檔的方法將數據進行編碼和解碼成二進制數據進行存儲,而在數據庫中需要使用blob類型存儲二進制數據。

如下面的例子:

在Shop.m中

#import "Shop.h"

@implementation Shop
#pragma mark 編碼
-(void)encodeWithCoder:(NSCoder *)enCoder {
    [enCoder encodeObject:self.name forKey:@"name"];
    [enCoder encodeDouble:self.price forKey:@"price"];
}
#pragma mark 解碼
- (instancetype)initWithCoder:(NSCoder *)decoder
{
    self = [super init];
    if (self) {
        self.name = [decoder decodeObjectForKey:@"name"];
        self.price = [decoder decodeDoubleForKey:@"price"];
    }
    return self;
}

-(NSString *)description {
    return [NSString stringWithFormat:@"%@--%f",self.name, self.price];
}

@end

在ViewController中

初始化數據庫

//初始化數據庫
-(void)initDatabase {
    //初始化
    NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"shop.sqlite"];
    self.db = [FMDatabase databaseWithPath:path];
    [self.db open];
    //創表
    //數據庫中blob是二進制對象
   [self.db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_shop(id integer PRIMARY KEY, shop blob NOT NULL)"];
}

添加數據

//添加數據
- (void)addShops {
    for (int i = 0; i < 1000; i++) {
        Shop *shop = [[Shop alloc] init];
        shop.name = [NSString stringWithFormat:@"商品--%d", i];
        shop.price = arc4random() % 10000;
        //要將一個對象存進數據庫的blob字段,最先轉化為NSData
        //一個對象要遵守NSCoding協議,實現協議中相應的方法,才能轉化為NSData
        NSData *data = [NSKeyedArchiver archivedDataWithRootObject:shop];
        [self.db executeUpdateWithFormat:@"INSERT INTO t_shop(shop) VALUES (%@);",data];
    }
}

讀取數據

// 讀取數據
-(void)readShos {
    FMResultSet *set = [self.db executeQuery:@"SELECT * FROM t_shop LIMIT 10;"];
    while (set.next) {
        NSData *data = [set objectForColumnName:@"shop"];
        Shop *shop = [NSKeyedUnarchiver unarchiveObjectWithData:data];
        NSLog(@"%@---%f",shop.name, shop.price);
    }
}

示例代碼

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 在程序開發中,數據層永遠是程序的核心結構之一。我們將現實事物進行抽象,使之變成一個個數據。對這些數據的加工處理是代...
    帥不過oneS閱讀 640評論 0 1
  • MySQL技術內幕:InnoDB存儲引擎(第2版) 姜承堯 第1章 MySQL體系結構和存儲引擎 >> 在上述例子...
    沉默劍士閱讀 7,468評論 0 16
  • 數據持久化的相關知識 四種將數據持久化存儲到iOS文件系統的機制: plist 對象歸檔 iOS的嵌入式關系數據庫...
    melouverrr閱讀 649評論 0 0
  • iOS開發-數據持久化 原文鏈接 Sindri的小巢 在程序開發中,數據層永遠是程序的核心結構之一。我們將現實事物...
    人生路02閱讀 761評論 1 4
  • 在微信上看到這樣一句話“如果我用你待我的方式來待你,恐怕你早已離去,不管是親情,友情,還是愛情!凡事換個角度,假如...
    懷瑾姑娘閱讀 731評論 2 8