【问题标题】:Adding Batch values with an array使用数组添加批处理值
【发布时间】:2013-08-27 14:52:06
【问题描述】:

我正在尝试将数组中的批处理数据插入到我的移动项目的 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)。有人可以帮我看看我的错误是什么吗?

问候...

【问题讨论】:

    标签: objective-c sqlite


    【解决方案1】:

    您正在准备大量语句,但只执行最后一条。

    将对sqlite3_step 的调用移动到循环中。

    请注意,您必须为您准备的每条语句致电sqlite3_finalize,无论该步骤是否成功。

    在没有调用sqlite3_close的情况下不能跳出函数。

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

    【讨论】:

    • 还有一个问题,sqlite3_reset 也在函数范围内。你的意思是把它移到 for 循环中?
    • 现在你调用sqlite3_finalize 两次,第一次跳出循环。
    • 对不起,我没有在 for 循环中看到 sqlite3_finalize 。现在我编辑了我的代码。
    • 我尝试了我的代码当前编辑的版本,但仍然没有添加所有的sql语句..
    • 因为在第一步之后你仍然执行return
    猜你喜欢
    • 2014-10-14
    • 2018-04-25
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2014-06-05
    相关资源
    最近更新 更多