Lesen Sie große Datei in sqlite-Tabelle in objective-C auf dem iPhone

Ich habe eine 2 MB-Datei nicht zu groß ist, dass ich gerne in eine sqlite-Datenbank, so dass ich es suchen. Es gibt über 30K Einträge im CSV-format, mit sechs Feldern pro Zeile. Mein Verständnis ist, dass sqlite auf dem iPhone verarbeiten kann, eine Datenbank dieser Größe.

Habe ich ein paar Ansätze, aber Sie wurden alle langsam > 30 s. Ich habe versucht:

1) Mit C-code, um die Datei Lesen und Parsen der Felder in arrays.

2) unter Verwendung der folgenden Objective-C-code analysieren Sie die Datei und legen Sie es in direkt in die sqlite-Datenbank:

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);
    }

Bin ich etwas fehlt? Kennt jemand einen schnellen Weg, um die Datei in eine Datenbank?

Oder ist es möglich, übersetzen Sie die Datei in eine sqlite-format gelesen werden können, können direkt in sqlite?

Oder sollte ich die Datei in eine plist und legen Sie Sie in einem Wörterbuch? Leider muss ich die Suche auf zwei Bereiche, und ich denke, ein Wörterbuch kann nur noch einen Schlüssel haben?


Louis, vielen Dank für Ihre Antwort.

Ich sollte erwähnt haben, dass ich nur schreiben wollen, die Daten in die Datenbank einmal am Anfang der app, und dann später ich brauche nur zu tun, liest der Datenbank, keine schreibt.

Können Sie mir sagen, wie zu generieren der sqlite3-Datenbank direkt aus der CSV-Datei als Teil des build-Prozesses?

InformationsquelleAutor James Testa | 2009-07-31
Schreibe einen Kommentar