【发布时间】:2014-01-21 12:22:46
【问题描述】:
我正在尝试将大约 500 条记录插入到 sqlite 数据库中,这需要 20 秒,这太多了!谁能告诉我如何优化它。
for (int i = 0 ; i< [[[dic objectForKey:@"response" ]objectForKey:@"requete"]count]; i++) {
[sqlManager executeQuery:[[[dic objectForKey:@"response"]objectForKey:@"requetes"]objectAtIndex:i]];
}
与
-(void)executeQuery:(NSString*)_query
{
sqlite3 *database;
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
if(sqlite3_exec(database, [_query UTF8String],NULL, NULL, NULL) == SQLITE_OK){
//NSLog(@"Query Success");
}
else{
// NSLog(@"Query Failed");
}
sqlite3_close(database);
}
sqlite3_close(database);
}
【问题讨论】:
-
只打开一次。如果您要进行多次插入,则开始一个事务。
-
只是建议使用 FMDB github.com/ccgus/fmdb 你可以使用事务然后不用担心回滚
-
请注意,无需在每次操作时都打开/关闭。如果应用程序在数据库打开时崩溃,SQLite 在保存数据方面非常强大。一旦你完成了“提交”(除非你开始一个事务,否则它会在每个操作之后隐式发生),保证数据被写入磁盘。