2012-04-24 3 views
-1

SqlManager를 사용하여 sqlite에서 간단한 데이터베이스를 만든 다음 간단한 xcode 프로젝트의 리소스에 파일 (Person.sqlite)을 복사하고이 코드를 사용하여 데이터베이스에 연결했지만 데이터베이스가로드되지 않는 것 같습니다. getAllPersons의 sqlite3_prepare가 데이터베이스에있는 "Persona"테이블을 찾을 수 없기 때문에 init의 함수 sqlite3_open은 0을 반환합니다. 모든 데이터베이스에있는 테이블을 찾을 수 없으므로 실제 데이터베이스에 연결할 수 없습니다. 데이터베이스를 찾지 못했던 열린 곳이 새로운 비어있는 곳을 만들었을 것입니다. 그렇다면 왜 이런 일이 일어 났습니까? DB의 경로를 제공하는 내 방식이 올바르지 않습니까? ("[NSBundle mainBundle] pathForResource : @"Persone "ofType : @"sqlite "];) 실제로 경로를 정의하는 변수의 nslog (sqLiteDb)는 null을 반환하지만이 경로를 호출하는 다른 여러 방법을 시도했지만 모두 잘못 ...xcode에 sqlite 데이터베이스를로드 할 수 없습니다.

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     NSString *sqlLiteDb = [[NSBundle mainBundle] pathForResource:@"Persone" ofType:@"sqlite"]; 
     NSLog(@"Path db: %@",sqlLiteDb); 
     if(sqlite3_open([sqlLiteDb UTF8String], &database) != SQLITE_OK){ 
      NSLog(@"Failed to open database"); 
     }else { 
      NSLog(@"Database opened"); 
     } 
    } 

    return self; 
} 

- (NSArray *) getAllPersons{ 
    NSMutableArray *returnArray=[[NSMutableArray alloc] init]; 
    NSString *query= @"SELECT Nome FROM Persona";  
    sqlite3_stmt *statement; 
    NSLog(@"%d", sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, NULL)); 
    printf("could not prepare statemnt: %s\n", sqlite3_errmsg(database)); 


    if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, NULL) == SQLITE_OK){ 
     NSLog(@"kndvnspò"); 
     while (sqlite3_step(statement)==SQLITE_ROW) { 
      int uniqueId = sqlite3_column_int(statement, 0); 
      char *nomeChar =(char *) sqlite3_column_text(statement, 1); 
      char *cognomeChar =(char *) sqlite3_column_text(statement, 2); 
      NSString *nome= [[NSString alloc] initWithUTF8String:nomeChar]; 
      NSString *cognome= [[NSString alloc] initWithUTF8String:cognomeChar]; 

      PersonInfo *info= [[PersonInfo alloc] initWithUniqueId:uniqueId nome:nome cognome:cognome]; 
      [returnArray addObject:info]; 
     } 
     sqlite3_finalize(statement); 
    } 
    return returnArray; 

} 

죄송합니다. 해결책은 간단하다고 생각합니다.하지만 여전히 xcode를 좋아하지 않습니다 ^^ 감사합니다!

업데이트 : 아니요, 항상 "Persone"이었습니다. 2 시간의 실패와이 질문의 여는 후, 마침내 "깨끗한 것을 사용하지 않는 이유는 무엇인가?"라고 생각했습니다. 그것은 결코 작동하지는 않지만 기회를 제공 할 것입니다. "분명히, 그것은 효과가있었습니다. -_- ' 어떤 이유로 프로젝트는 깨끗한 것만 필요했습니다 ... 어쨌든 도와 줘서 고마워요!


내가

만 깨끗한 필요한 프로젝트가 ... 반드시 두 시간이 좋은 생각이 아니다 준비 전화 어떤 이유로 업데이트에 말했듯이. 죄송합니다, 내가 게시 한 코드는 테스트를 위해서만 사용 된 코드가 더러 웠습니다. 오픈에 권한에 문제가있을 수 있다는 점을 알아두면 편리합니다. 도움 주셔서 대단히 감사합니다!

+0

.에 위치하지만 당신은 당신의 코드에서 "Persone"를 사용한다. 이름이 일관 적입니까? 또한 실행중인 항목은 무엇입니까 (Mac, iOS 기기, iOS 시뮬레이터)? –

+0

준비를 두 번 호출합니다 (한 번은 기록에서, 한 번은 * 진짜 *). 그게 좋은 생각이라고 생각하니? 또한 Xcode는 IDE입니다. 코드를 작성하는 데 사용한 도구가 아닌 운영 체제에 태그를 지정하는 것이 좋습니다. – trojanfoe

답변

0

sqlite가 종종 DB 파일과 전체 directori 파일에 대한 권한의 개방 becaise 실패 "(Person.sqlite)"당신이 말하는 하나 개의 시점에서

관련 문제