FMDB將對象放進資料庫,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中去了