我必须在 SQLite 数据库中添加大量数据,并且需要一些建议如何在 iOS 中实现该功能。我必须将大约 1 GB 的数据从服务器同步到 iPhone SQLite 数据库。
我需要替代方法在 iOS 端的数据库中存储快速数据。我试过一个一个的存储数据,但是同步和存储数据的时间太长了。
我必须在 SQLite 数据库中添加大量数据,并且需要一些建议如何在 iOS 中实现该功能。我必须将大约 1 GB 的数据从服务器同步到 iPhone SQLite 数据库。
我需要替代方法在 iOS 端的数据库中存储快速数据。我试过一个一个的存储数据,但是同步和存储数据的时间太长了。
我建议你阅读这个 Stack Overflow 问题:
这是对如何提高 SQLite 性能的全面介绍,当我在 iOS 上尝试将 100,000 条记录插入 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);
sqlite3_exec
with BEGIN
andEND TRANSACTION
语句是神奇的。