1

我有一个项目,其中包括FMDB来管理SQLite数据库。我导入并链接了 FMDB 包装器,但问题是当我查询数据库时没有显示任何结果:

使用 Firefox SQLite 管理器 (Ubuntu) 创建的 sqlite 数据库,我将其复制到 Xcode 。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsPath = [paths objectAtIndex:0];
NSString *path = [docsPath stringByAppendingPathComponent:@"db.sqlite"];

FMDatabase *db = [FMDatabase databaseWithPath:path];

[db open];

FMResultSet *fResult= [db executeQuery:@"SELECT * FROM mytable"];

while([fResult next])
{
    NSLog(@"%@",[fResult stringForColumn:@"title"]);
}
[db close];  
4

1 回答 1

1

如果您已将数据库复制到 xCode 中,那么您应该首先在应用程序的主捆绑资源路径中搜索您的数据库,然后将其复制到 Documents 目录中(如果该目录尚不存在),只有这样您才能使用它。lastErrorMessage您可能希望使用和lastErrorCode消息来调试 FMDatabase 对象。

FMDatabase *db = [FMDatabase databaseWithPath:path];
NSLog(@"database instantiated: %@", db];

[db open];

NSLog(@"Database has encountered an error with message: %@. And code: %d", db.lastErrorMessage, db.lastErrorCode];

FMResultSet *fResult= [db executeQuery:@"SELECT * FROM mytable"];

while([fResult next])
{
    NSLog(@"%@",[fResult stringForColumn:@"title"]);
}
[db close];  

另一个问题当然听起来很傻,但是如果您的“mytable”不包含任何内容,那么while 循环表达式将始终为假。但我最好的猜测 - 数据库不在 Documents 目录中。

于 2011-12-28T08:44:57.203 回答