你的位置:首页 > 操作系统

[操作系统]FMDB将对象放进数据库


首先建立一个HJShop类,实现NSCoding协议

#import <Foundation/Foundation.h>


@interface HJShop : NSObject<NSCoding>

@property (nonatomic, copy)NSString *name;

@property (nonatomic, assign)double price;

@end

 #import "HJShop.h"


@implementation HJShop


- (void)encodeWithCoder:(NSCoder *)aCoder

{

    [aCoder encodeObject:self.name forKey:@"name"];

    [aCoder encodeDouble:self.price forKey:@"price"];

}


- (id)initWithCoder:(NSCoder *)aDecoder

{

    if (self = [super init]) {

        self.name = [aDecoder decodeObjectForKey:@"name"];

        self.price = [aDecoder decodeDoubleForKey:@"price"];

    }

    return self;

}


- (NSString *)description

{

    return [NSString stringWithFormat:@"%@ - %f", self.name, self.price];

}

@end

 -----------------------------------------------------

然后使用FMDB框架

     //初始化

    NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"shop.sqlite"];

    self.db = [FMDatabase databaseWithPath:path];

    [self.db open];

    

    //创表

    [self.db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_shop (id integer PRIMARY KEY, shop blob NOT NULL UNIQUE);"];

    [self addShops];

    [self readShop];

 

- (void)addShops

{

    HJShop *shop = [[HJShop alloc] init];

    shop.name = @"jack";

    shop.price = 11.0;

    

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:shop];

    [self.db executeUpdateWithFormat:@"INSERT OR IGNORE INTO t_shop(shop) VALUES (%@);", data];

}


- (void)readShop

{

    FMResultSet *set = [self.db executeQuery:@"SELECT * FROM t_shop;"];

    while (set.next) {

        NSData *data = [set objectForColumnName:@"shop"];

        HJShop *shop = [NSKeyedUnarchiver unarchiveObjectWithData:data];

        NSLog(@"%@", shop);

    }

只要把对象encoding成二进制文件,就可以放进SQLite中去了