2011-05-16 5 views
0

"pk"와 "text"라는 두 개의 열이있는 "keywords"테이블이 있습니다. 파이어 폭스 SQLite 관리자에서는 "text"열에 "john"과 "tom"이라는 두 가지 이름이 있음을 알 수 있습니다. 내 코드에는 오류나 경고가 없습니다. 내가 시뮬레이터에서 실행하면 콘솔에서 While 루프로 들어간 적이 없다는 것을 알 수 있습니다. 그것은 FMResultSet "rs"는 SQL 쿼리에서 어떤 결과도 얻지 못하고 있음을 의미합니다. "Opened successfully"메시지는 내 데이터베이스가 문제없이 열렸음을 의미하며 데이터베이스 경로, 데이터베이스 이름 등은 정확합니다. 콘솔에서 검색어 오류가 표시되지 않으므로 내 검색어도 정확합니다. 하지만 "while loop started"메시지가 표시되지 않습니다. 내 데이터베이스 배열도 비어 있으므로 루프가 작동하지 않는 동안 알 수 있습니다. FMDatabase를 사용하고 있습니다. 여기 FMDB 파일의 경로가있는 경우 데이터베이스를 상관없이 열거 나되지루프가 작동하지 않는 동안 SQlite-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]; 
} 

답변

0

내 코드입니다 (실제로 FMDB 또한 오류 또는 경고로 실행하지 않고 [FMDatabase databaseWithPath:nil]를 호출 할 수 있도록 설계되어있다). '올바른'데이터베이스를 열고 있는지 확인하려면 NSFileManager를 사용하고 경로의 유효성을 검사해야합니다.

- (BOOL)fileExistsAtPath:(NSString *)path 

가장 일반적인 실수는 sqlite-manager와 FMDB가 다른 데이터베이스를 참조하고 있다는 것입니다.

관련 문제