iOS 6.0以下版本不支持批量数据库插入[关闭]

问题描述 投票:-4回答:2

在iOS 6.0中的单个sqlite查询中插入400行时。

e.g:  INSERT INTO MYTAB (NAME ,ADD) values("name1","add1"),("name2","add2"),("name3","add3"),.....

,效果很好,但是在5.0中运行相同代码时会出现错误:

“,”附近的语法错误。

ios objective-c sqlite
2个回答
1
投票

考虑使用事务和准备好的sqlite语句。

NSString* query;

if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK)
{
    query = @"BEGIN TRANSACTION";
    ret = sqlite3_exec(database, [query UTF8String], NULL, NULL, NULL);

    sqlite3_stmt *compiledStatement;
    NSString* str = @"INSERT INTO MYTAB (NAME, ADD) values (?,?)";
    sqlite3_prepare_v2(database, [str UTF8String], -1, &compiledStatement, NULL);

    for (int i=0; i<50; i++)
    {
        const char *name = "name";
        const char *add = "add";

        sqlite3_bind_text(compiledStatement, 1, name, -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(compiledStatement, 2, add, -1, SQLITE_TRANSIENT);

        ret = sqlite3_step(compiledStatement);
        ret = sqlite3_reset(compiledStatement);
    }

    sqlite3_finalize(compiledStatement);

    query = @"COMMIT TRANSACTION";
    ret = sqlite3_exec(database, [query UTF8String], NULL, NULL, NULL);

    sqlite3_close(database);
}

0
投票

SQLite 3.7.11之前不支持此语法:

增强INSERT语法以允许通过VALUES子句插入多行。

[似乎是iOS 5 uses 3.7.7, iOS 6 uses 3.7.13,并且在iOS 5中查询失败的原因。

您仍然可以使用单独的INSERT语句或here或准备好的语句,但是,如果您只需要高效地预先填充数据库,则也可以使用suggestions mentioned here

© www.soinside.com 2019 - 2024. All rights reserved.