使用json ios同时插入多行数据sqlite

时间:2015-10-19 21:17:51

标签: ios objective-c json sqlite fmdb

我试图将同一时间插入多个行数据到sqlite数据库。但是例如我有一个值。我从我的api得到它。在这个值我有2000个数据。我只是添加1行和在那一行我可以看到2000个数据。

 for (NSDictionary *customerDictionary in customerArray) {
            Kart *kart = [Kart customerWithName:[customerDictionary valueForKey:@"adi"]];
            [_kartList addObject:kart];
        }

我正在使用FMDB作为sqlite。

修改

我可以用s添加一个数据到sqlite数据库。但是当我尝试将另一个对象添加到数据库时,它将所有数据添加到我的数据库中。

它只是添加一行和正确的数据

[database executeUpdate:@"INSERT OR REPLACE INTO KartDB (adi) VALUES (?)" withArgumentsInArray:kart.adi];

它将kart.adi和kart.adi2中的所有数据添加到一行中。

        [database executeUpdate:@"INSERT OR REPLACE INTO KartDB (adi,adi2) VALUES (?,?)" withArgumentsInArray:[NSArray arrayWithObjects:kart.adi,kart.adi2, nil]];
你能给我一个建议吗?

1 个答案:

答案 0 :(得分:0)

您尝试将数据添加到表中的PRIMARY KEY是什么?也许您只是覆盖插入,因为PRIMARY KEY不是唯一的。

看起来像这样。

[database executeUpdate:@"INSERT OR REPLACE INTO KartDB (primaryKey, adi,adi2) VALUES (?,?,?)" withArgumentsInArray:[NSArray arrayWithObjects:primaryKey, kart.adi,kart.adi2, nil]];

此外,如果您一次进行2000次插入,请查看FMDB的inTransaction功能。将使您的更新更快。

然后你可以调用类似的东西:

[dbManager.databaseQueue inTransaction:^(FMDatabase *db, BOOL *rollback) {

 for (NSDictionary *customerDictionary in customerArray) {
        Kart *kart = [Kart customerWithName:[customerDictionary valueForKey:@"adi"]];

        [database executeUpdate:@"INSERT OR REPLACE INTO KartDB (primaryKey, adi) VALUES (?,?)", primaryKey, kart.adi];

    }

}];
[dbManager.databaseQueue close];