Search code examples
iossqliteios7fmdb

How to save & retrieve NSdata into sqlite through FMDB


How can I save NSData into sqlite, I am using FMDB wrapper for saving data.

Below is the code which I have tried so far
For saving

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];

For Retriving

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

I have tried both datatype blob & text but no luck so far, can anybody guide me how to do it?


Solution

  • Below is the Snippet for all who may face the same issue while inserting NSData to Sqlite using FMDB.

    In my Case I wanted to store NSArray in Sqlite So i first convert the NSArray into NSData & then store it in Sqlite.

    Converting NSArray into NSData

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

    Saving NSData into Sqlite

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

    Note:- Don't build a query using stringWithFormat[below is the code which you should not use]:. Thanks to @rmaddy & @hotlicks for pointing me to this :)

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

    and now the last step i.e retrieving NSData back to NSArray

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

    Hope this will help the needy & beginner :)