Мой вопрос заключается в том, как вставить полученные данные массива JSON в базу данных sqlite. Я получил данные JSON, которые представляют собой набор словарей.сохранение данных json в базе данных sqlite в iOS
Мой код для сохранения JSON результат выглядит следующим образом:
-(BOOL) saveApiResults: (NSString *)tableName : (NSArray *)data
{
BOOL saveSuccess = NO;
@try {
const char *dbPath = [databasePath UTF8String];
if(sqlite3_open(dbPath,&database)==SQLITE_OK) {
sqlite3_exec(database, "BEGIN", 0, 0, 0);
//pass an array containing json dictionary to below line
NSDictionary *rowData=[data objectAtIndex:0];
NSArray *keyArray = [rowData allKeys];
NSLog(@"key array %@",keyArray);
NSString *[email protected]"INSERT INTO ";
insertSQL=[insertSQL stringByAppendingString:@"moodsdata"];
insertSQL=[insertSQL stringByAppendingString:@" VALUES("];
for(int j=0;j<[keyArray count];j++)
{
insertSQL=[insertSQL stringByAppendingString:@"?"];
if(j<[keyArray count]-1)
insertSQL=[insertSQL stringByAppendingString:@","];
}
insertSQL=[insertSQL stringByAppendingString:@");"];
NSLog(@"query : %@ ",insertSQL);
const char *sqlstatement = [insertSQL UTF8String];
sqlite3_stmt *compiledstatement;
if(sqlite3_prepare_v2(database,sqlstatement , -1, &compiledstatement, NULL)==SQLITE_OK) {
for (NSUInteger i = 0; i < [data count]; i++) {
NSDictionary *rowData=[data objectAtIndex:0];
for(int j=0;j<[keyArray count];j++) {
NSString *val = @"";
NSString *value=(NSString *)[rowData objectForKey:[keyArray objectAtIndex:j]];
if((value != nil) && (![value isEqual:[NSNull null]]))
val=[NSString stringWithFormat:@"%@",value];
NSLog(@"values %@",val);
sqlite3_bind_text(compiledstatement,j+1,[val UTF8String], -1, SQLITE_TRANSIENT);
}
if(sqlite3_step(compiledstatement) != SQLITE_DONE) {
NSLog(@"ERROR");
}
sqlite3_clear_bindings(compiledstatement);
sqlite3_reset(compiledstatement);
}
sqlite3_exec(database, "COMMIT", 0, 0, 0);
saveSuccess = YES;
NSLog(@"RESULTS SAVED SUCCESSFULLY!");
} else {
NSLog(@"StatemenT FAILED (%s)", sqlite3_errmsg(database));
}
sqlite3_finalize(compiledstatement);
} else {
NSLog(@"Statement FAILED (%s)", sqlite3_errmsg(database));
}
}
@catch (NSException *exception) {
NSLog(@"NSException : %@",exception.description);
}
@finally {
sqlite3_close(database);
}
return saveSuccess;
}
Мой вопрос, когда я пытаюсь передать массив JSON этому методу только сохраняет значение для первого объекта массива. т.е. сохраняются только первые значения словаря. Пожалуйста, скажите мне, что я делаю неправильно.
Обновите свой вопрос кодом, соответствующим вашему вопросу. что ты уже испробовал? Код в вашем вопросе не имеет никакого отношения к вашему вопросу. – rmaddy
Несвязанный, но почему вы строите заявление 'CREATE' таким образом? Почему это не единственный строковый литерал? По крайней мере, используйте 'NSMutableString' для его сборки по частям. – rmaddy
Я обновил свой вопрос. Пожалуйста, проверь это. –