我想插入数据库表中的2000行,是否有任何方法可以非常快地插入数据。当前我正在使用下面的代码在数据库中插入数据。
代码:-
+(NSString* )getDatabasePath{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"Crocodilian"];
return writableDBPath;
}
+(NSMutableArray *)executeQuery:(NSString*)str{
sqlite3_stmt *statement= nil;
sqlite3 *database;
NSString *strPath = [self getDatabasePath];
NSMutableArray *allDataArray = [[NSMutableArray alloc] init];
if (sqlite3_open([strPath UTF8String],&database) == SQLITE_OK) {
if (sqlite3_prepare_v2(database, [str UTF8String], -1, &statement, NULL) == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW) {
NSInteger i = 0;
NSInteger iColumnCount = sqlite3_column_count(statement);
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
while (i< iColumnCount) {
NSString *str = [self encodedString:(const unsigned char*)sqlite3_column_text(statement, i)];
NSString *strFieldName = [self encodedString:(const unsigned char*)sqlite3_column_name(statement, i)];
[dict setObject:str forKey:strFieldName];
i++;
}
[allDataArray addObject:dict];
[dict release];
}
}
sqlite3_finalize(statement);
}
sqlite3_close(database);
return allDataArray;
}
提前致谢。
最佳答案
您的问题是,您试图一次插入一行。 SQLite在每次插入后添加提交。在插入大数据时,我也遇到了类似的性能问题。我使用批量插入解决了它。
首先创建具有多个插入的查询(在这种情况下不需要准备语句),然后立即触发查询。这具有重大的性能改进。唯一的问题是,在创建多个插入查询之前,您必须验证数据。
快乐的编码..
关于iphone - 在iPhone的SQLite中插入大量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18118240/