iPhone fdbm SQLite无法读取数据

时间:2011-12-28 08:08:01

标签: objective-c sqlite fmdb

我有一个包含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];  

1 个答案:

答案 0 :(得分:1)

如果您已将数据库复制到xCode中,那么您应首先在应用程序的主bundle资源路径中搜索您的数据库,然后将其复制到Documents目录中(如果它尚不存在),只有这样您才能使用它。您可能希望使用lastErrorMessagelastErrorCode消息调试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循环表达式将始终为false。但我最好的猜测 - 数据库不在Documents目录中。