0

「pk」と「text」の2つの列を持つテーブル「keywords」があります。Firefox SQLiteマネージャーでは、「テキスト」列に「john」と「tom」の2つの名前があることがわかります。私のコードにはエラーや警告はありません。シミュレーターで実行していると、コンソールで、Whileループに入っていないことがわかります。FMResultSet"rs"がSQLクエリから結果を取得していないことを意味します。"Openssuccessful"メッセージが表示されます。これは、データベースが問題なく開かれ、データベースパス、データベース名などが正しいことを意味します。コンソールにクエリエラーが表示されないので、私のクエリも正しいです。しかし、「whileループが開始されました」というメッセージが表示されません。私のデータベース配列も空なので、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];
}
4

1 に答える 1

0

ファイルへのパスが存在するかどうかに関係なく、FMDB はデータベースを開きます (実際、FMDB は[FMDatabase databaseWithPath:nil]、エラーや警告が発生することなく呼び出すことができるように設計されています)。「正しい」データベースを開いているかどうかを確認したい場合は、NSFileManager を使用してパスを検証する必要があります。

- (BOOL)fileExistsAtPath:(NSString *)path

最も一般的な間違いは、sqlite-manager と FMDB が異なるデータベースを参照していることです。

于 2011-07-24T19:19:31.877 に答える