FMDB将对象放进数据库[一]

写在前面:我使用了runtime来更好的运作,详见第二篇

http://www.cnblogs.com/hanjian/p/4359568.html 

 

首先建立一个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中去了 

你可能感兴趣的:(数据库)