2011-01-11 4 views
2

В моем приложении, я хочу, чтобы экспортировать файл базы данных SQLite в CSV-файл ..Как экспортировать файл SQLite в CSV файл в iPhone SDK

Не могли бы вы предложить мне, как это сделать? Спасибо.

+1

Имеет ли база данных один или несколько таблиц? –

+0

Да, у него есть 2 стола. – Meghan

ответ

13

Во-первых, вы хотите, чтобы вы использовали FMDB для доступа к базе данных, потому что люди, которые используют API SQLite C непосредственно в Objective-C, являются мазохистами. Вы можете сделать это так:

FMDatabase *db = [[FMDatabase alloc] initWithPath:@"/path/to/db/file"]; 
FMResultSet *results = [db executeQuery:@"SELECT * FROM tableName"]; 
while([results nextRow]) { 
    NSDictionary *resultRow = [results resultDict]; 
    NSArray *orderedKeys = [[resultRow allKeys] sortedArrayUsingSelector:@selector(compare:)]; 
    //iterate over the dictionary 
} 

Что касается записи в файл CSV, а there's code for that too:

#import "CHCSV.h" 

CHCSVWriter * csvWriter = [[CHCSVWriter alloc] initWithCSVFile:@"/path/to/csv/file" atomic:NO]; 

//write stuff 
[csvWriter closeFile]; 
[csvWriter release]; 

И объединить их, вы могли бы сделать:

FMDatabase *db = [[FMDatabase alloc] initWithPath:@"/path/to/db/file"]; 
if (![db open]) { 
    //couldn't open the database 
    [db release]; 
    return nil; 
} 
FMResultSet *results = [db executeQuery:@"SELECT * FROM tableName"]; 
CHCSVWriter *csvWriter = [[CHCSVWriter alloc] initWithCSVFile:@"/path/to/csv/file" atomic:NO]; 
while([results nextRow]) { 
    NSDictionary *resultRow = [results resultDict]; 
    NSArray *orderedKeys = [[resultRow allKeys] sortedArrayUsingSelector:@selector(compare:)]; 
    //iterate over the dictionary 
    for (NSString *columnName in orderedKeys) { 
    id value = [resultRow objectForKey:columnName]; 
    [csvWriter writeField:value]; 
    } 
    [csvWriter writeLine]; 
} 
[csvWriter closeFile]; 
[csvWriter release]; 

[db close]; 
[db release]; 

Это будет записывать содержимое таблицы tableName в файл CSV.

+1

@ Дэйв: О, боже мой. Я никогда не слышал о FMDB. Я собираюсь, наконец, убить весь этот родной код SQLite в моем приложении! О счастливый день!!!!! – Josh

+1

@ Джош, пожалуйста! Для Obj-C есть * тонна * открытого исходного кода, поэтому, когда вы сомневаетесь, это, вероятно, уже сделано для вас (в пределах разумного);) Я буду следить за http://cocoaobjects.com –

+0

I сталкиваются с проблемами при импорте моего CSV-файла в мою базу данных sqlite. Мой файл csv содержит европейские языки со специальным символом, например умлаутом. Что может быть неправильным? – Meghan

0

Просто сделайте SELECT для каждой таблицы и распечатайте значение каждого столбца в соответствии с текстовым файлом.

Смежные вопросы