Bir web hizmetinden aldığım 40000 kayıtları iPad uygulamasındaki bir sqlite veritabanına eklemek istiyorum.40000 kayıtlarını bir iPad'deki bir sqlite veritabanına nasıl ekleyebilirim
Aşağıdaki kodu yazdım, ancak yaklaşık 20 dakika sürüyor, daha hızlı bir yol var mı?
- (NSArray *)insertPriceSQLWithPrice:(Price *) price
{
SQLiteManager *dbInfo = [SQLiteManager sharedSQLiteManagerWithDataBaseName:@"codefuel_catalogo.sqlite"];
sqlite3 *database;
NSString *querySQL=[self formatStringQueryInsertWithTable:@"prices_list" andObject:price];
if(sqlite3_open([dbInfo.dataBasePath UTF8String], &database) == SQLITE_OK)
{
sqlite3_stmt * compiledStatement;
const char *query_stmt = [querySQL UTF8String];
int result = sqlite3_prepare_v2(database, query_stmt, -1, &compiledStatement, NULL);
if (result == SQLITE_OK)
{
int success = sqlite3_step(compiledStatement);
NSLog(@"el numero de success es -> %i",success);
if (success == SQLITE_ERROR)
NSLog(@"Error al insertar en la base de datps");
}
else
NSLog(@"Error %@ ERROR!!!!",querySQL);
sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);
return nil;
}
Veritabanının açılmasını ve kapatılmasını yöntem dışı bırakırım. Bu size adil bir zaman harcıyor. Her bir 40.000 kesici uçtan biriyle bağlayıcıyı yaratın ve tamamlayın, ardından tamamlayın. Ayrıca, NSLog'lar gerçek yürütmeyi yavaşlatıyor olabilir. Ne kadar süreceğini görmek için günlükleri kullanmadan çalışırım. – Jeremy1026
Veritabanını 40000 kez yeniden açar mısınız? (Ayrıca, kayıt başına bir kez yeniden ifade edilmesini de engellemeniz gerekir ve tüm eklemeleri tek bir işlemde yapmak daha iyidir - ancak bu her satır için yeniden açılmasından daha az önemlidir). –
Doğru sorguya sahip her insert için birden çok satır ekleyebilir ve işlemin tamamını bir pakete sarabilirsiniz - şu anda SQLite, her bir ekleme işleminden sonra sizi yavaşlatan diske sığdırmak zorundadır. Ayrıca, her zaman –