如何将sqlite数据写入和检索到文件中

时间:2011-06-30 10:33:38

标签: iphone objective-c

朋友只是一般性问题。

如何在数据上写入和检索数据。如何以 .csv 格式制作此文件。

例如我正在检索那样的数据

NSString *coords = [[[NSString alloc] initWithFormat:@"%f,%f\n",longitude,latitude] autorelease];
[locations addObject:coords];

如何将此数据以 .csv格式写入文件。

而不是如何检索此数据

3 个答案:

答案 0 :(得分:0)

dave delong编写了一个csv解析器。你可以用它。

答案 1 :(得分:0)

首先,您需要确保使用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
}

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

#import "CHCSV.h"

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

//write stuff
[csvWriter closeFile];
[csvWriter release];
And to combine them, you'd do:

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文件。

然后,您可以使用CSV Parser解析CSV并获取数据。

答案 2 :(得分:0)

写csv

NSString *coords = [[[NSString alloc] initWithFormat:@"%f,%f\n",longitude,latitude] autorelease];

NSData *csvData =  [coords dataUsingEncoding:NSUTF8StringEncoding];

NSArray *UsrDocPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *DocsDir = [UsrDocPath objectAtIndex:0];
    NSString *csvPath = [DocsDir stringByAppendingPathComponent:@"coords.csv"];

    //This is upto your logic that do you want to remove existant csv file or not
    BOOL success = [FileManager fileExistsAtPath:csvPath];
    if(success){
        [FileManager removeItemAtPath:csvPath error:&error];
    }

    [csvData writeToFile:csvPath atomically:YES];

从文件中读取

NSData *csvData = [NSData dataWithContentsOfFile:csvPath];
NSString *strCSV = [[NSString alloc]initWithData:csvData encoding:NSUTF8StringEncoding];

希望有所帮助