Czytaj duży plik do tabeli sqlite w Celu-C na iPhone
Mam plik 2 MB, niezbyt duży, który chciałbym umieścić w bazie danych sqlite, aby móc go przeszukać. Istnieje około 30 tys. Wpisów w formacie CSV, z sześcioma polami na linię. Rozumiem, że sqlite na iPhone może obsługiwać bazę danych o tej wielkości.
Podjąłem kilka kroków, ale wszystkie były powolne> 30 sekund. Próbowałem:
1) Użycie kodu C do odczytania pliku i przeanalizowania pól w tablice.
2) Używając następującego kodu Objective-C do parsowania pliku i umieszczenia go bezpośrednio w bazie danych 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);
}
Czy czegoś mi brakuje? Czy ktoś zna szybki sposób na pobranie pliku do bazy danych?
Czy jest możliwe przetłumaczenie pliku na format sqlite, który można odczytać bezpośrednio w sqlite?
Czy powinienem zamienić plik na plist i załadować go do słownika? Niestety muszę przeszukać dwa pola i myślę, że słownik może mieć tylko jeden klucz?
Louis, dziękuję za odpowiedź.
Powinienem był wspomnieć, że chcę tylko raz zapisać dane do bazy danych na początku aplikacji, a potem muszę tylko czytać bazę danych, bez zapisów.
Czy możesz mi powiedzieć, jak wygenerować bazę danych sqlite3 bezpośrednio z pliku CSV w ramach procesu budowania?