NSDocumentDirectory给出奇怪的目录作为输出

时间:2012-11-03 12:28:06

标签: objective-c sqlite fmdb

我正在尝试从我的文档目录中打开sqlite数据库:

NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *dbFileName = [docDir stringByAppendingPathComponent:@"DatabaseName.sqlite"];

self.db = [FMDatabase databaseWithPath:dbFileName];

self.db.logsErrors = YES;

self.db = _db;
if ([self.db open]) {
    NSLog(@"database opened");

}
NSLog(@"docDir = %@",[NSString stringWithFormat:@"%@%@",docDir,dbFileName]);

NSLog显示奇怪的路径docDir = /Users/userName/Documents/Users/userName/Documents/DatabaseName.sqlite而不是/Users/userName/Documents/DatabaseName.sqlite。打开时没有错误或警告。

在此之后,我尝试从我的表中获取计数(*)

NSString *queryString = [NSString stringWithFormat:@"SELECT count(*) FROM histories"];
FMResultSet *result = [self.db executeQuery:queryString];
NSLog(@"count = %i", [result intForColumnIndex:0]);

当10k行但NSLog显示0时,数据库有更多。应用程序不适用于iOS,仅适用于命令行。我在哪里可以找到问题?

1 个答案:

答案 0 :(得分:2)

你有

docDir = /Users/userName/Documents
dbFileName = /Users/userName/Documents/DatabaseName.sqlite

因此在

NSLog(@"docDir = %@",[NSString stringWithFormat:@"%@%@",docDir,dbFileName]);

docDir打印两次(dbFileName已包含docDir)。

备注:声明self.db = _db;看起来很可疑,你可能想删除它。

已添加: FMDB文档声明:

  

在尝试访问之前,您必须始终调用-[FMResultSet next]   查询中返回的值,即使您只期望一个。

所以你的代码应该是这样的:

FMResultSet *result = [self.db executeQuery:queryString];
if ([result next]) {
    NSLog(@"count = %i", [result intForColumnIndex:0]);
}