【问题标题】:SQlite-FMDatabase query while loop not working循环不工作时 SQlite-FMDatabase 查询
【发布时间】: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];
}

【问题讨论】:

    标签: xcode sqlite fmdb


    【解决方案1】:

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

    - (BOOL)fileExistsAtPath:(NSString *)path
    

    最常见的错误是您的 sqlite-manager 和 FMDB 引用不同的数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多