在SQLite中存储大量数据

这个问题在这里已经有了答案:

  • 提高SQLite的每秒插入性能? 10个答案

  • 我建议你阅读这个堆栈溢出问题:

    如何提高SQLite的性能?

    如何提高SQLite的性能一般都非常有帮助,当我遇到速度问题试图在iOS上的SQLite数据库中插入100,000条记录时,这非常有帮助。

    具体而言,交易的使用显着降低了整体插入速度。 这里有一小段示例代码,所以你可以看到我的意思:

    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);
    

    带有BEGINEND TRANSACTION语句的sqlite3_exec是神奇的。

    链接地址: http://www.djcxy.com/p/19771.html

    上一篇: Store huge data in SQLite

    下一篇: "Insert if not exists" statement in SQLite