J'ai un fichier de 2 Mo, pas trop grand, que je voudrais mettre dans une base de données sqlite pour que je puisse le chercher. Il y a environ 30K entrées au format CSV, avec six champs par ligne. Ma compréhension est que sqlite sur l'iPhone peut gérer une base de données de cette taille.Lire un fichier volumineux dans la table sqlite dans l'objectif-C sur l'iPhone
J'ai pris quelques approches mais elles ont toutes été lentes> 30 s. J'ai essayé:
1) En utilisant le code C pour lire le fichier et analyser les champs en tableaux.
2) En utilisant le code suivant Objective-C pour analyser le fichier et le mettre en directement dans la base de données 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);
}
Est-ce que je manque quelque chose? Est-ce que quelqu'un sait d'un moyen rapide pour obtenir le fichier dans une base de données?
Ou est-il possible de traduire le fichier dans un format sqlite qui peut être lu directement dans sqlite? Ou devrais-je transformer le fichier en un plist et le charger dans un dictionnaire? Malheureusement, j'ai besoin de chercher sur deux des champs, et je pense qu'un dictionnaire ne peut avoir qu'une seule clé?
Louis, merci pour votre réponse.
J'aurais dû mentionner que je veux seulement écrire les données dans la base de données une fois au début de l'application, et plus tard je n'ai besoin que de faire des lectures de la base de données, pas d'écriture.
Pouvez-vous me dire comment générer la base de données sqlite3 directement à partir du fichier CSV dans le cadre du processus de construction?
Vous ne voulez pas vider le fichier. Cela vous donne une série sérialisée d'instructions SQL qui peuvent être utilisées pour recréer une base de données, pas une base de données elle-même.Il suffit d'exécuter sqlite3 un chemin et il créera le fichier db là "sqlite3/path/to/my/db". Si ce fichier est lisible par l'homme, ce n'est pas ce que vous voulez. –
Louis, peux-tu me dire la commande qui exécute "run sqlite3 a path"? Merci. –
Voulez-vous dire quelque chose comme: % sqlite3 newdatabase.sqlite