循环不工作时 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 查询的主要内容,如果未能解决你的问题,请参考以下文章

While(1) 循环在 IOS 的后台不工作

AngularJS - ForEach 不循环

为啥循环时数组大小不增加? [复制]

如何在 bash 中进行 while 循环工作?

foreach 循环无法转换,但手动转换和 for 循环工作

Qthread 不工作,GUI 仍然挂起