我试图将同一时间插入多个行数据到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]];
你能给我一个建议吗?
答案 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];