2012-11-03 50 views
1

我想从我的文档目录中打开SQLite数据库:NSDocumentDirectory给人奇怪的目录输出

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。打开时没有错误或警告。

在此之后我试图获取COUNT(*)从我的表

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

数据库具有更多的时候10K行,但NSLog的显示为0的应用是不是适用于iOS,只有命令行。我在哪里可以找到问题?

回答

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]); 
} 
+0

你是对的。这是我的粗心。但为什么count是0? – RomanHouse

+0

@RomanHouse:我不知道( - : - 你是否删除了'self.db = _db;'? –

+0

是的,删除了这一行,但仍然是0. – RomanHouse