问题
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?
回答1:
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 :)
回答2:
Don't build a query using stringWithFormat:. This is a bad idea for several reasons.
Use the executeQuery method where you put a ? for each value to be bound to the query.
Something like this:
[database executeQuery:@"insert into save_article values (?,?,?,?,?,?)", model.Id, model.title, model.earliestKnownDate, data, model.excerpt,model.image_url];
来源:https://stackoverflow.com/questions/22234237/how-to-save-retrieve-nsdata-into-sqlite-through-fmdb