Ich habe eine 2 MB große Datei, nicht zu groß, die ich in eine SQLite-Datenbank einfügen möchte, damit ich sie durchsuchen kann. Es gibt etwa 30.000 Einträge im CSV-Format mit sechs Feldern pro Zeile. Mein Verständnis ist, dass SQLite auf dem iPhone eine Datenbank dieser Größe verarbeiten kann.Lies große Datei in Sqlite-Tabelle in Objective-C auf iPhone
Ich habe ein paar Annäherungen gemacht, aber sie waren alle langsam> 30 s. Ich habe versucht:
1) C-Code verwenden, um die Datei zu lesen und die Felder in Arrays zu analysieren.
2) die folgende Objective-C-Code Mit Hilfe der Datei zu analysieren und sie in direkt in die SQLite-Datenbank setzen:
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 zu bekommen?
Oder ist es möglich, die Datei in ein SQLite-Format zu übersetzen, das direkt in SQLite gelesen werden kann?
Oder soll ich die Datei in einen Plist umwandeln und in ein Dictionary laden? Leider muss ich auf zwei der Felder suchen, und ich denke, dass ein Wörterbuch nur einen Schlüssel haben kann?
Louis, danke für Ihre Antwort.
Ich hätte erwähnen sollen, dass ich nur einmal am Anfang der App die Daten in die Datenbank schreiben will, und später muss ich nur noch die Datenbank lesen, keine schreibt.
Können Sie mir sagen, wie Sie die sqlite3-Datenbank direkt aus der CSV-Datei als Teil des Build-Prozesses generieren?
Sie möchten die Datei nicht ausgeben. Dadurch erhalten Sie eine serialisierte Reihe von SQL-Anweisungen, mit denen Sie eine Datenbank und nicht eine Datenbank selbst erstellen können.Einfach sqlite3 einen Pfad ausführen und dort wird die db-Datei "sqlite3/path/to/my/db" erstellt. Wenn diese Datei menschenlesbar ist, ist es nicht das, was Sie wollen. –
Louis, kannst du mir den Befehl sagen, der "run sqlite3 a path" ausführt? Danke. –
Meinen Sie so etwas wie: % sqlite3 newdatabase.sqlite