2013-08-11 4 views
3

테스트 iOS 응용 프로그램에서 Update 문을 사용하기 위해이 로그를 사용하면 로그에 'Success'가 출력되지만 데이터베이스에는 변경 사항이 없습니다. 누구든지 올바른 방향으로 나를 가리킬 수 있을까요? 대단히 감사하겠습니다.iOS SQLite 업데이트 실행

나는 이것에 아주 새로운 제품이므로 제 작성법에 어쩌면 쓸만한 코드를 용서해주십시오.

@try { 
    NSFileManager *fileMgr = [NSFileManager defaultManager]; 
    NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"chars.sqlite3"]; 
    BOOL success = [fileMgr fileExistsAtPath:dbPath]; 
    if(!success) 
    { 
     NSLog(@"Cannot locate database file '%@'.", dbPath); 
    } 
    if(!(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK)) 
    { 
     NSLog(@"An error has occured: %s", sqlite3_errmsg(db)); 

    } 
    const char *sql = "UPDATE characters SET level = 'testing' WHERE id='1'"; 
    sqlite3_stmt *sqlStatement; 
    if(sqlite3_prepare(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK) 
    { 
     NSLog(@"Problem with prepare statement: %s", sqlite3_errmsg(db)); 
    }else{ 
     if (sqlite3_step(sqlStatement) == SQLITE_DONE){ 
      NSLog(@"Success"); 
     } 
    } 
    sqlite3_finalize(sqlStatement); 
} 
@catch (NSException *exception) { 
    NSLog(@"Problem with prepare statement: %s", sqlite3_errmsg(db)); 
} 
@finally { 
    sqlite3_close(db); 
} 
+2

방어막 프로그래밍 기술을 사용하지 않으려는 것은 아니지만 코드 조각은 오류가 발생하면 SQLite가 예외를 throw한다고 가정합니다. 그건 그렇지 않을거야. 따라서 예외 처리기에서'sqlite3_errmsg'를 검사한다는 개념은 의미가 없습니다. 다른 프로그래밍 언어와 달리 Objective-C try-catch-finally 블록은 예기치 않은 프로그래머 오류와 같은 예외적 인 상황에만 사용됩니다. 그리고 코드에서 많은 예외 처리를 수행하는 경우 일반적으로 오류를 감지하는 잘못된 기술을 사용합니다. – Rob

+1

감사합니다. 정말로 조언에 감사드립니다. – user2672330

답변

4

문제는 읽기 전용 인 번들에서 데이터베이스를 여는 것입니다. 해야만합니다

  1. 문서 폴더에 데이터베이스가 있는지 확인하십시오.

  2. 거기에 없으면 번들에서 문서 폴더로 데이터베이스를 복사하십시오.

  3. 이제 문서 폴더에서 데이터베이스를 엽니 다.

+0

그냥 넘어 가서 모든 것이 완벽하게 작동합니다. 고마워, 너는 생명의 은인이야. – user2672330

+0

@ user2672330 당신이 한 일에 대해 자세히 설명해 주시겠습니까? –