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

DAM*_*108 7 sqlite fmdb ios ios7

如何保存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];
Run Code Online (Sandbox Code Playgroud)

对于Retriving

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

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

DAM*_*108 15

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

在我的情况下我想存储NSArraySqlite所以我首先转换NSArrayNSData然后存储它Sqlite.

将NSArray转换为NSData

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:YourNSarray];;
Run Code Online (Sandbox Code Playgroud)

将NSData保存到Sqlite中

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

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

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

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

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:[database dataForColumn:@"yourcololumname"]];
Run Code Online (Sandbox Code Playgroud)

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


rma*_*ddy 6

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

使用executeQuery?为查询绑定每个值的方法.

像这样的东西:

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