Я новичок и работаю над кодом ниже. В результате создания файла NSMutableDictionary из файла CSV я передаю значение классу DatabaseManager, и есть метод, который получает значения и пытается вставить его в базу данных. 1. Как я могу вставить эти значения в БД? 2. Является ли эффективным способом сделать небольшое приложение для словарей на iOS? (У меня есть прибл 40000 записей и размер составляет около 3 МБ)iOS csv to sqlite
ГЛАВНЫЙ КЛАСС
... NSString *filePath= [[NSBundle mainBundle] pathForResource:@"Test" ofType:@"csv"]; NSString *content = [[NSString alloc]initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; //NSString *path1=[NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"JapMon" ofType:@"csv"] encoding:NSUTF8StringEncoding error:nil]; NSArray *messArr=[content componentsSeparatedByString:@"\n"]; if(messArr) { NSLog(@"%d", [messArr count]); for(int i=1;i<=[messArr count]-2;i++) { NSMutableDictionary *d=[[NSMutableDictionary alloc] init]; NSString *StrValue=[NSString stringWithFormat:@"%@",[messArr objectAtIndex:i]]; StrValue=[StrValue stringByReplacingOccurrencesOfString:@"\"" withString:@""]; StrValue=[StrValue stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; // Here give whatever saperator you need to saperate data NSArray *arr=[StrValue componentsSeparatedByString:@","]; //NSLog(@"%@", [arr objectAtIndex:2]); [d setValue:[arr objectAtIndex:0] forKey:@"word"]; [d setValue:[arr objectAtIndex:1] forKey:@"hansa"]; [d setValue:[arr objectAtIndex:2] forKey:@"def"]; //Here add logic to insert row in your database table [[DatabaseManager getSharedInstance]insertInitialDataToDb:d]; //NSLog(@"%@", d); //Add this dictionary "d" into database [d release]; //Cleanup. } } //[content release]; ...
2.DATABASEMANAGER КЛАСС
-(BOOL) insertInitialDataToDb:(NSMutableDictionary*)initialData
{
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath, &database) == SQLITE_OK)
{
NSString *insertSQL = [NSString stringWithFormat:@"insert into japmon (word, hansa, def) values (\"%@\")", initialData];
NSLog(@"ok");
const char *insert_stmt = [insertSQL UTF8String];
sqlite3_prepare_v2(database, insert_stmt,-1, &statement, NULL);
if (sqlite3_step(statement) == SQLITE_DONE)
{
return TRUE;
}
else {
return FALSE;
}
sqlite3_reset(statement);
}
return TRUE;
Моя база данных использует полнотекстовый поиск – Johny
Это что-то вам нужно делать регулярно или только один раз при первом запуске? Являются ли эти данные довольно статичными, скорее всего, лучше импортировать CSV в файл базы данных SQLite заблаговременно и включить файл DB, а не делать все это в коде. – Devunwired
Почему вы не используете Core Data? – HAS