1

SQLiteデータベースを管理するためのFMDBを含むプロジェクトがあります。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メッセージを使用して FMDatabase オブジェクトをデバッグすることができlastErrorCodeます。

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 ディレクトリにはありません。

于 2011-12-28T08:44:57.203 に答える