循环不工作时 SQlite-FMDatabase 查询
Posted
技术标签:
【中文标题】循环不工作时 SQlite-FMDatabase 查询【英文标题】:SQlite-FMDatabase query while loop not working 【发布时间】:2011-05-16 22:48:47 【问题描述】:我有一个表“keywords”,它有 2 列“pk”和“text”。在 firefox SQLite manager 中,我可以看到“text”列中有两个名字“john”和“tom”。我的代码中没有错误或警告。当我在模拟器中运行它时,我可以在控制台中看到我永远不会进入 While 循环。这意味着 FMResultSet "rs" 没有从 SQL 查询中得到任何结果。我收到 "Opened successfully" 消息意味着我的数据库打开没有任何问题,并且数据库路径、数据库名称等都是正确的。我的查询也是正确的,因为它没有在控制台中显示任何查询错误。但我没有收到“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】:无论文件路径是否存在,FMDB 都会打开数据库(实际上 FMDB 也被设计为您可以调用[FMDatabase databaseWithPath:nil]
而不会遇到错误或警告)。如果您想检查您是否打开了“正确”的数据库,您必须使用 NSFileManager 并验证路径。
- (BOOL)fileExistsAtPath:(NSString *)path
最常见的错误是您的 sqlite-manager 和 FMDB 引用不同的数据库。
【讨论】:
以上是关于循环不工作时 SQlite-FMDatabase 查询的主要内容,如果未能解决你的问题,请参考以下文章