iphone - 在iPhone上的Objective-C中将大文件读入sqlite表

标签 iphone sqlite large-files

我有一个2 MB的文件(不是太大),我想放入一个sqlite数据库中,以便我可以搜索它。大约有3万个CSV格式的条目,每行六个字段。我的理解是,iPhone上的sqlite可以处理这种大小的数据库。

我采取了几种方法,但是它们都变慢了> 30 s。我试过了:

1)使用C代码读取文件并将字段解析为数组。

2)使用以下Objective-C代码解析文件并将其直接放入sqlite数据库:

NSString *file_text = [NSString stringWithContentsOfFile: filePath usedEncoding: NULL error: NULL];

NSArray  *lineArray = [file_text componentsSeparatedByString:@"\n"];

for(int k = 0; k < [lineArray count]; k++){
    NSArray *parts = [[lineArray objectAtIndex:k] componentsSeparatedByString: @","];

    NSString *field0       = [parts objectAtIndex:0];
    NSString *field2       = [parts objectAtIndex:2];
    NSString *field3       = [parts objectAtIndex:3];

NSString *loadSQLi = [[NSString alloc] initWithFormat: @"INSERT INTO TABLE (TABLE, FIELD0, FIELD2, FIELD3) VALUES ('%@', '%@', '%@');",field0, field2, field3];


    if (sqlite3_exec (db_table, [loadSQLi  UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK) {
        sqlite3_close(db_table);
        NSAssert1(0, @"Error loading table: %s", errorMsg);
    }


我想念什么吗?有谁知道将文件放入数据库的快速方法?

还是可以将文件转换为可直接读取为sqlite的sqlite格式?

还是应该将文件转换为plist并将其加载到Dictionary中?不幸的是,我需要在两个字段中进行搜索,并且我认为字典只能有一个键?



路易斯,感谢您的回复。

我应该提到,我只希望在应用程序开始时一次将数据写入数据库,然后以后我只需要读取数据库,而无需写入。

您能告诉我如何在构建过程中直接从CSV文件生成sqlite3数据库吗?

最佳答案

......不要自己处理C API。尤其是当有更好的包装器可用时:http://cocoaheads.byu.edu/resources/sqlite

关于iphone - 在iPhone上的Objective-C中将大文件读入sqlite表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1214000/

相关文章:

c - 为什么 minizip 不归档大文件(大于 4 GB)

iphone - 如何使用 mpplayer 从 url 播放视频?

iphone - facebook login给我已经授权这个应用程序而不自动返回到应用程序

iphone - 提交后更改iTunes图稿

c++ - sqlite3_prepare 失败并显示 "near "TABLE": syntax error"

mysql - 程序打开大型MySQL转储

java - 估算 Android 上从 SD 卡读取大文件的时间

iphone - 在单个 View 中隐藏 iPhone 上的状态栏?

mysql - 带计数的 SQL 查询

java - 当我使用javafx将其上传到数据库时,如何仅显示组合框中选定的值