SQlite-FMDatabase查询while循环不起作用

时间:2011-05-16 22:48:48

标签: xcode sqlite fmdb

我有一个表“关键字”,其中包含2列“pk”和“text”。在firefox SQLite管理器中,我可以看到“text”列中有两个名称“john”和“tom”。我的代码中没有错误或警告。当我在模拟器中运行它然后我可以在控制台中看到我从未进入While循环。这意味着FMResultSet“rs”没有从SQL查询获得任何结果。我得到“打开成功”消息意味着我的数据库打开没有任何问题,数据库路径,数据库名称等是正确的。我的查询也是正确的,因为它没有在控制台中显示任何查询错误。但我没有得到“while loop started”的消息。我的数据库数组也是空的,所以我知道while循环不起作用。我正在使用FMDatabase。这是我的代码

-(void) readWordsfromDatabase
{   
db=[FMDatabase databaseWithPath:globalDatabasePath];
globalDatabaseArray=[[NSMutableArray alloc] init];
[db setLogsErrors:TRUE ];
[db setTraceExecution:TRUE];
if (![db open])
{
    NSLog(@"Failed to open database");
    return;
}
else {
    NSLog(@"Opened successfully");
}
FMResultSet *rs= [db executeQuery:@"SELECT * FROM keywords"];
while([rs next])
{
    NSLog(@"while loop started");

    int aPK=[rs intForColumn:@"pk"];
    NSString *aText=[rs stringForColumn:@"text"];
    NSLog(@"aText is %@",aText);

    singleKeyword *sk=[[singleKeyword alloc] initWithData:aPK :aText];
    [globalDatabaseArray addObject:sk];
    [sk release];

            NSLog(@"text in array%@",[self.globalDatabaseArray  objectAtIndex:0]);  
    NSLog(@"text in array%@",[self.globalDatabaseArray  objectAtIndex:1]);
}//while closed
//NSLog(@"text in array%@",[self.globalDatabaseArray  objectAtIndex:0]);
    // NSLog(@"text in array%@",[self.globalDatabaseArray  objectAtIndex:1]);   
[db close];
}

1 个答案:

答案 0 :(得分:0)

无论文件的路径是否存在,FMDB都会打开数据库(实际上FMDB的设计也可以调用[FMDatabase databaseWithPath:nil],而不会遇到错误或警告)。如果您想检查是否正在打开“正确”的数据库,则必须使用NSFileManager并验证路径。

- (BOOL)fileExistsAtPath:(NSString *)path

最常见的错误是你的sqlite-manager和你的FMDB指的是不同的数据库。