如何保存&通过FMDB将NSdata检索到sqlite

时间:2014-03-06 19:35:29

标签: ios sqlite ios7 fmdb

如何将NSData保存到sqlite中,我使用FMDB包装器来保存数据。

以下是我到目前为止尝试过的代码
保存

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:model.expertArray];; 
NSString *query = [NSString stringWithFormat:@"insert into save_article values ('%@','%@','%@','%@','%@','%@')",
                       model.Id, model.title, model.earliestKnownDate, data, model.excerpt,model.image_url];

用于Retriving

while([results next]) {
  NSData *data = [results dataForColumn:@"experts"];
        NSMutableArray *photoArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];
 }     

我已尝试过两种数据类型blob&文字,但到目前为止没有运气,有人可以指导我怎么做吗?

2 个答案:

答案 0 :(得分:15)

以下是使用FMDB将NSData插入Sqlite时可能遇到同样问题的所有人的代码段。

在我的案例中,我想将NSArray存储在Sqlite中,因此我首先将NSArray转换为NSData&然后将其存储在Sqlite

将NSArray转换为NSData

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:YourNSarray];;

将NSData保存到Sqlite

[database executeQuery:@"insert into save_article values (?,?,?,?,?,?)", model.Id, model.title, model.earliestKnownDate, data, model.excerpt,model.image_url];

注意: - 不要使用stringWithFormat构建查询[以下是您不应使用的代码]:感谢@rmaddy& @hotlicks指点我这个:)

NSString *query = [NSString stringWithFormat:@"insert into user values ('%@', %d)",
@"brandontreb", 25];
[database executeUpdate:query];

现在是最后一步,即将 NSData检索回NSArray

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:[database dataForColumn:@"yourcololumname"]];

希望这将有助于有需要的人和初学者:)

答案 1 :(得分:6)

不要使用stringWithFormat:构建查询。出于几个原因,这是个坏主意。

使用executeQuery方法,为每个要为查询绑定的值设置?

这样的事情:

[database executeQuery:@"insert into save_article values (?,?,?,?,?,?)", model.Id, model.title, model.earliestKnownDate, data, model.excerpt,model.image_url];