Может кто-нибудь объяснить, что лучший способ вставить много данных на iPhone с помощью FMDB? Я вижу такие вещи, как использование команды beginTransaction. Я честно не уверен, что это или setShouldCacheStatements. Я следовал тому коду, который сделал мой коллега до сих пор, и это выглядит так:
BOOL oldshouldcachestatements = _db.shouldCacheStatements;
[_db setShouldCacheStatements:YES];
[_db beginTransaction];
NSString *insertQuery = [[NSString alloc] initWithFormat:@"INSERT INTO %@ values(null, ?, ?, ?, ?, ?, ?, ?);", tableName];
[tableName release];
BOOL success;
bPtr += 2;
int *iPtr = (int *)bPtr;
int numRecords = *iPtr++;
for (NSInteger record = 0; record < numRecords; record++) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// Some business logic to read the binary stream
NSNumber *freq = aFreq > 0 ? [NSNumber numberWithDouble:100 * aFreq / 32768]: [NSNumber numberWithDouble:-1.0];
// these fields were calculated in the business logic section
success = [_db executeUpdate:insertQuery,
cID,
[NSNumber numberWithInt:position],
[NSString stringWithFormat:@"%@%@", [self stringForTypeA:typeA], [self stringForTypeB:typeB]], // methods are switch statements that look up the decimal number and return a string
[NSString stringWithFormat:@"r%i", rID],
[self stringForOriginal:original],
[self stringForModified:modified],
freq];
[pool drain];
}
[outerPool drain];
[_db commit];
[_db setShouldCacheStatements:oldshouldcachestatements];
Я могу сделать это быстрее всего? Является ли написанием ограничение sqlite? Я видел это: http://www.sqlite.org/faq.html#q19 и не был уверен, что эта реализация была лучшей с fmdb, или если была какая-то другая вещь, которую я могу сделать, Некоторые другие коллеги упоминали что-то о массовых вставках и оптимизируют это, но я не уверен, что это означает, так как это моя первая встреча с sqlite. Какие мысли или направления я могу исследовать? Спасибо!