iphone - 在iPhone的SQLite中插入大量数据

标签 iphone ios objective-c sqlite

我想插入数据库表中的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/

相关文章:

iphone - NSPredicate 子查询语法

objective-c - 当委托(delegate)不再被引用时,在 `[NSApp run]` 处崩溃

ios - 如何在我的 iOS 应用程序中实现该功能?

iphone - 呈现带有动画效果的模态视图

iphone - 如何加载预放大的 WebView? (在 Xcode/Objective C 中)

iphone - 对于某些纹理尺寸,glFramebufferTexture2D 在 iPhone 上失败

iphone - 有没有办法在 iOS 中以编程方式打开和关闭 wifi?

ios - 使用 iCarousel 正确显示另一个 Storyboard 中的 Controller View

iphone - 智能 CVS 和核心数据

iphone - 如何制作可在 iOS 5 至 7 上运行的 armv7 arm64 fat 二进制文件?