【问题标题】:Insert multiple row data same time sqlite with json ios使用json ios同时插入多行数据sqlite
【发布时间】:2016-01-18 08:54:42
【问题描述】:

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

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

我正在为 sqlite 使用 FMDB。

编辑

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

它只是添加一行并正确数据

[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]];

你能给我一个建议吗?

【问题讨论】:

    标签: ios objective-c json sqlite fmdb


    【解决方案1】:

    您要向其中添加数据的表的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];
    

    【讨论】:

    • 如果我有多个像 customerArray 这样的数组怎么办?我该如何插入
    猜你喜欢
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 2012-05-22
    • 1970-01-01
    相关资源
    最近更新 更多