如何在iPhone SDK中将SQLite文件导出为CSV文件

Meg*_*han 4 csv sqlite iphone objective-c export-to-excel

在我的应用程序中,我想将SQLite数据库文件导出为CSV文件.

你能建议我怎么做吗?谢谢.

Dav*_*ong 15

首先,您需要确保使用FMDB访问数据库,因为直接在Objective-C中使用SQLite C API的人是masochists.你可以这样做:

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
}
Run Code Online (Sandbox Code Playgroud)

至于写入CSV文件,那里有代码:

#import "CHCSV.h"

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

//write stuff
[csvWriter closeFile];
[csvWriter release];
Run Code Online (Sandbox Code Playgroud)

要结合它们,你会做:

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];
Run Code Online (Sandbox Code Playgroud)

这会将tableName表的内容写入CSV文件.