2011-09-11 3 views
0

SQLite 데이터베이스가 있고 SQLite 브라우저에서 열어서 쿼리를 실행합니다. 그러나 Xcode 프로젝트에서이 데이터를 가져올 수 없습니다.iOS, SQLite : DB에서 읽을 수 없습니다

NSString *databaseName = @"dbFile.db"; 
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDir = [documentPaths objectAtIndex:0]; 
NSString *databasePath = [documentsDir stringByAppendingPathComponent:databaseName]; 
sqlite3 *database; 

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) { 
    NSLog(@"db is ok"); // works just fine 
    const char *sqlStatement = "SELECT table.column FROM table"; 
    sqlite3_stmt *compiledStatement; 

    if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) { 
     NSLog(@"OK"); // nothing happens 
    } 
    sqlite3_close(database); 
} 

Macite의 SQLite 브라우저에서 실행 된 것과 동일한 쿼리가 정상적으로 작동합니다.

+0

sqlite가보고 한 오류를 확인하고 기록해야합니다. 오류가 무엇인지 알려주지는 않습니다. – Mat

+0

@ufw :이 작업이 가능합니까? 'select col from table' 즉, column-name 접두사가 붙은 table-name이 없습니까? – Tim

+0

두 가지면에서 SQLite 로그는 적절한 테이블을 찾을 수 없다고 말합니다. 하지만 이전에 말씀 드렸듯이 독립형 SQLite 브라우저로 데이터를 가져올 수 있습니다. – ufw

답변

1

sqlite3_open은 데이터 액세스를 시작할 때까지 모든 오류를보고하지 않습니다. 예를 들어 모든 파일 이름과 경로는 오류없이 전달됩니다.

데이터베이스가 문서 폴더에 있습니까? 기본적으로는 존재하지 않습니다. 아마 메인 번들에 있습니까?

시도해보십시오. NSString * databaseName = [[NSBundle mainBundle] pathForResource : @ "dbFile"ofType : @ "db"];

+0

네가 맞아, 고마워! – ufw

+1

지정된 경로에 DB가 없으면 비어있는 새 DB가 만들어집니다. 따라서, 열기 전에 리소스 dir의 읽기 전용 DB를 doc 디렉토리에 복사해야합니다. –

관련 문제