在SQLite中存储大量数据

Dev*_*shM 8 sqlite objective-c ios

我必须在SQLite数据库中添加大量数据,并且需要一些建议如何在iOS中执行该功能.我必须将大约1 GB的数据从服务器同步到iPhone SQLite数据库.

我需要其他方法在iOS端的数据库中存储快速数据.我试图逐个存储数据,但同步和存储数据需要花费太多时间.

Axe*_*eva 5

我建议你阅读这个 Stack Overflow 问题:

如何提高 SQLite 的性能?

这是一个非常全面的关于如何提高 SQLite 总体性能的研究,当我在尝试将 100,000 条记录插入到 iOS 上的 SQLite 数据库时遇到速度问题时,它非常有帮助。

具体而言,事务的使用显着降低了整体插入速度。这是一小段示例代码,因此您可以理解我的意思:

const char *dbpath = [[Utilities pathInDocumentsFolder: MY_DATABASE] UTF8String];
const char *sql = "INSERT INTO Filters (Region, District, Territory) " \
    "VALUES (?, ?, ?)";
sqlite3 *mapDB;
char *sqliteError;

sqlite3_stmt *insertStatement;

sqlite3_open(dbpath, &mapDB);

sqlite3_exec(mapDB, "BEGIN TRANSACTION", NULL, NULL, &sqliteError);

if (sqlite3_prepare_v2(mapDB, sql, -1, &insertStatement, NULL) == SQLITE_OK) {
    for (NSArray *row in filtersArray) {
        sqlite3_bind_text(insertStatement, 1, [[row objectAtIndex: 0] UTF8String], -1, SQLITE_TRANSIENT);  // Region
        sqlite3_bind_text(insertStatement, 2, [[row objectAtIndex: 1] UTF8String], -1, SQLITE_TRANSIENT);  // District
        sqlite3_bind_text(insertStatement, 3, [[row objectAtIndex: 2] UTF8String], -1, SQLITE_TRANSIENT);  // Territory

        if (sqlite3_step(insertStatement) != SQLITE_DONE) {
            break;
        }

        sqlite3_clear_bindings(insertStatement);
        sqlite3_reset(insertStatement);
    }
}

sqlite3_exec(mapDB, "END TRANSACTION", NULL, NULL, &sqliteError);

sqlite3_finalize(insertStatement);
Run Code Online (Sandbox Code Playgroud)

sqlite3_execBEGINEND TRANSACTION语句的魔力。