Может кто-нибудь объяснить, как лучше всего вставить много данных на 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. Любые мысли или направления, которые я могу исследовать? Спасибо!