2014-07-07 2 views
0

다음은 기존 데이터베이스에 테이블을 추가하는 코드입니다. 내 코드는 sqlite3_prepare_v2의 성공 콜백에 도달하고 table created 로그를 제공하지만 터미널을 사용하여 sqlite 데이터베이스를 열면 생성 된 테이블이 없다는 것을 알 수 있습니다. 내 데이터베이스 테이블의 이름은이에 의해 프라그으로 fz1.sqlite을 선언 : #define kDBName @"fz1.sqlite"왜 테이블이 ios의 sqlite에 만들어지지 않았습니까?

-(sqlite3 *)mydb:(NSString *)query{ 



static sqlite3 *database; 
static sqlite3_stmt *enableForeignKey; 



if (database == NULL) { 
    sqlite3 *newDBconnection; 


    // first get the path for the document directory of the application 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *dbpath = [paths objectAtIndex:0]; 
    NSString *path = [dbpath stringByAppendingPathComponent:kDBName]; 


    if (sqlite3_open([path UTF8String], &newDBconnection) == SQLITE_OK) { 
     NSLog(@"Database Successfully Opened :)"); 
     database = newDBconnection; 

     if (sqlite3_prepare_v2(database,[query UTF8String], -1, &enableForeignKey, NULL) != SQLITE_OK) { 
      NSLog(@"ERROR IN PRAGMA!"); 
     } 
     else{ 

      sqlite3_exec(database, [query UTF8String], NULL, NULL, NULL); 

      NSLog(@"faiz's table created"); 
     } 

     sqlite3_finalize(enableForeignKey); 

    } else { 
     NSLog(@"Error in opening database :("); 
     database = NULL; 
    } 
} 

return database; 
    } 
+1

sqlite3은 요청할 때 무엇이 ​​잘못되었는지 알려줍니다. 그렇게하면 문제를 해결할 수 있습니다. – trojanfoe

+0

DB를 여는 곳을 인쇄하십시오. SQLite 초보자를위한 확률은 당신이 생각하는 곳에 파일을 열지 않고있는 50:50보다 낫습니다. –

답변

1

그것은 당신의 구현 오류를 보인다. 난 당신이 응용 프로그램 번들에 배치 DB 파일을 여는 것 같아요 그리고 그것은 당신이 수행하는 쿼리로 업데이 트됩니다.

응용 프로그램을 실행하면 데이터베이스 파일이 장치/시뮬레이터의 문서 디렉토리에 복사됩니다. 따라서 iOS Simulator에서 응용 프로그램을 실행하는 경우 문서 디렉토리 폴더의 db를 확인하십시오.

업데이트를 열고 업데이트 여부를 확인하십시오. DB 파일 iOS 시뮬레이터

/사용자/XYZ가/라이브러리/응용 프로그램 지원/아이폰 시뮬레이터/7.1/응용 프로그램/B5EC1893-B38F-4AB4 - AE7C-48EF685EE35F와 문서 디렉터리의 폴더 구조의

예 당신은 SQL을 직접 주입 될 수 -(sqlite3 *)mydb:(NSString *)query를 호출하기 전에 유사한 [NSString stringWithFormat:@"YourSqlStatement %@ %@",parameter1,parameter2]; 또는 무언가를 사용하여 쿼리에 매개 변수를 넣어 경우

+0

OP는 응용 프로그램 번들이 아닌 문서 디렉토리에서 데이터베이스를 엽니 다. – trojanfoe

1

을 /Documents/db.sqlite. 이 작업을 수행하는 경우 sqlite_bind_text을 사용하여 매개 변수를로드 한 다음 sqlite_step을 실행하십시오.

구현과 관련이없는 경우 sqlite_exec의 결과를 기록하고 오류 메시지를 확인하십시오.

관련 문제