1

我正在尝试将数组中的批处理数据插入到我的移动项目的 Sqlite3 中。

我的代码似乎工作正常,但它并没有插入所有数据。

PS:我编辑了我的代码:

        -(BOOL) saveBatchData:(NSArray *)userSourceID userDestID:(NSArray *)userDestID message:(NSArray *)message sentDate:(NSArray *)sentDate
{
    const char *dbpath = [databasePath UTF8String];
    if (sqlite3_open(dbpath, &database) == SQLITE_OK)
    {
        for(int i=0; i<[message count]; i++)
        {

            NSString *insertSQL = [NSString stringWithFormat:@"insert into messages (userSourceID,userDestID, message, sentDate) values (\"%d\",\"%d\", \"%@\",\"%@\")",[[userSourceID objectAtIndex:i] integerValue],[[userDestID objectAtIndex:i] intValue], [message objectAtIndex:i],[sentDate objectAtIndex:i]];

            const char *insert_stmt = [insertSQL UTF8String];

            sqlite3_prepare_v2(database, insert_stmt,-1, &statement, NULL);

            if (sqlite3_step(statement) == SQLITE_DONE)
            {
                sqlite3_finalize(statement);

                return YES;

            } else {

                NSLog(@"Hata = %s",sqlite3_errmsg(database));

                return NO;
            }

            sqlite3_reset(statement);

        }

        sqlite3_close(database);

    }

    return NO;
}

输出似乎是,函数只是在数组的 39 个元素上添加了几行(我认为是 4)。有人可以帮我这里有什么错误吗?

问候...

4

1 回答 1

1

您正在准备很多语句,但只执行最后一个。

将调用移动sqlite3_step到循环中。

请注意,sqlite3_finalize无论该步骤是否成功,您都必须调用您准备的每份声明。

不调用就不能跳出函数sqlite3_close

sqlite3_reset声明完成后,您不得致电。

于 2013-08-27T15:03:46.227 回答