将所有对象存到数据库中

原帖地址

如果将字典或数组直接存储在数据库中,会将数组或字典转化成字符串,所以可以使用归档与反归档的方法将数据进行编码和解码成二进制数据进行存储,而在数据库中需要使用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阅读 3,805评论 0 1
  • MySQL技术内幕:InnoDB存储引擎(第2版) 姜承尧 第1章 MySQL体系结构和存储引擎 >> 在上述例子...
    沉默剑士阅读 12,132评论 0 16
  • 数据持久化的相关知识 四种将数据持久化存储到iOS文件系统的机制: plist 对象归档 iOS的嵌入式关系数据库...
    melouverrr阅读 3,793评论 0 0
  • iOS开发-数据持久化 原文链接 Sindri的小巢 在程序开发中,数据层永远是程序的核心结构之一。我们将现实事物...
    人生路02阅读 4,048评论 1 4
  • 在微信上看到这样一句话“如果我用你待我的方式来待你,恐怕你早已离去,不管是亲情,友情,还是爱情!凡事换个角度,假如...
    怀瑾姑娘阅读 3,984评论 2 8