使用数组添加批处理值

时间:2013-08-27 14:52:06

标签: objective-c sqlite

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

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

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)。有人可以帮我解决我的错误吗?

...问候

1 个答案:

答案 0 :(得分:1)

你正在准备很多陈述,但只执行最后一个陈述。

将呼叫转移到sqlite3_step循环。

请注意,无论步骤是否成功,您都必须为准备好的每个陈述致电sqlite3_finalize

如果不调用sqlite3_close,则不得跳出该功能。

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