创建一个循环数组或批量插入以将具有多个值的字典从已解析的Json字符串插入到具有FMDB iOS的SQLite数据库中。目标C.

时间:2013-05-29 09:32:50

标签: objective-c sqlite loops nsdictionary fmdb

我有一个Parsed Json字符串,我想循环这些值并将它们插入我的FMDB Sqlite数据库。我一次只能在数据库中放一条记录。我想将所有记录都放在sqlite数据库中。

我知道我必须为此制作某种循环。

我想获取下面有多个值的解析后的json,并将其插入名为unitofMeasure和Name的列中。

所以我想创建一个循环,将多个id和多个名称插入到我的数据库的unitOfMeasureID列和Name列中。

目前我只能一次插入i记录。

UnitOfMeasureID To Use: 1
Name: kph
UnitOfMeasureID To Use: 2
Name: kpm
UnitOfMeasureID To Use: 3
Name: kpm

  for (defineJsonDataLookUp in self.jsonLookup)
{
    NSNumber* UnitOfMeasureID = [defineJsonDataLookUp objectForKey:@"unitOfMeasureID"];
    NSLog(@"UnitOfMeasureID To Use: %@", UnitOfMeasureID);

    NSNumber* Factor = [defineJsonDataLookUp objectForKey:@"Factor"];
    NSLog(@"Factor To Use: %@", Factor);

    NSArray* Name = [defineJsonDataLookUp objectForKey:@"Name"]; //for actual json response
    NSLog(@"Name: %@", Name); //3

    NSNumber* ParentID = [defineJsonDataLookUp objectForKey:@"ParentID"];
    NSLog(@"ParentID: %@", ParentID);
}

if ([strResult isEqualToString:@"[]"])
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No Internet Connection!" message:@" Please connect to the Internet" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [alert show];
    return;
}

else
{

    for (defineJsonDataLookUp in self.jsonLookup)
    {
        NSNumber* UnitOfMeasureID = [defineJsonDataLookUp objectForKey:@"unitOfMeasureID"];
        NSLog(@"UnitOfMeasureID To Use: %@", UnitOfMeasureID);

        NSNumber* Factor = [defineJsonDataLookUp objectForKey:@"Factor"];
        NSLog(@"Factor To Use: %@", Factor);

        NSArray* Name = [defineJsonDataLookUp objectForKey:@"Name"]; //for actual json response
        NSLog(@"Name: %@", Name); //3

        NSNumber* ParentID = [defineJsonDataLookUp objectForKey:@"ParentID"];
        NSLog(@"ParentID: %@", ParentID);

        FMDatabase *db = [FMDatabase databaseWithPath:[Utility getDatabasePath]];

        [db open];

        [db executeUpdate:[NSString stringWithFormat:@"delete from unitofmeasure"]];

            [db executeUpdate:@"INSERT INTO unitofmeasure   (unitOfMeasureID,Factor,Name,ParentID) VALUES (?,?,?,?)",UnitOfMeasureID,Factor,Name,ParentID];
//                [db executeUpdate:@"INSERT INTO unitofmeasure (unitOfMeasureID,Name) VALUES (?,?);",
//             [self.defineJsonDataLookUp objectForKey:@"unitOfMeasureID"],[self.defineJsonDataLookUp objectForKey:@"Name"], nil];
        FMResultSet *results = [db executeQuery:@"select * from unitofmeasure"];
        while([results next]) {
            NSString *Name = [results stringForColumn:@"Name"];
            NSInteger ParentID  = [results intForColumn:@"ParentID"];
            NSLog(@"UdadfdadfddfFuckingser: %@ - %d",Name, ParentID);
        }
        [db close];

    }

    HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"37x-Checkmark.png"]];
    HUD.mode = MBProgressHUDModeCustomView;
    [HUD hide:YES afterDelay:0];

}


}

我的SQlite数据库看起来像这样,我想插入我的字典中的所有记录UnitOfMeasureID:1,名称:kph,UnitOfMeasureID:2,名称:kpm,UnitOfMeasureID:3,名称:kpm

enter image description here 此致

1 个答案:

答案 0 :(得分:1)

你没有太多的事情继续下去。数据库的结构是什么?什么是主键?哪些是独特的钥匙? JSON数据是什么样的?有效吗?你想插入你认为你的东西吗?

但是,作为一般建议,你忽略了错误返回码。

[db executeUpdate:@"INSERT INTO unitofmeasure"];

应该

if(! [db executeUpdate:@"INSERT INTO unitofmeasure"]) {
  // handle error
}

来自documentation

  

执行更新会返回单个值BOOL。返回值   YES表示更新已成功执行,返回值为   NO表示遇到了一些错误。你可以调用   -lastErrorMessage和-lastErrorCode方法来检索更多信息

最后,我认为这是一个复制粘贴错误:

[db executeUpdate:[NSString stringWithFormat:@"delete from unitofmeasure"]];
[db executeUpdate:@"INSERT INTO unitofmeasure   

第一行删除表中的所有行。第二行插入一行。