2010-06-26 3 views
2

SQLite db에 값을 삽입하려하지만 프로그램을 시도 할 때마다 오류 메시지가 나타나지 않고 충돌합니다.SQLite iPhone - Insert Fails

- (void) insertToDatabase:(NSString *) refName { 

    // The Database is stoed in the application bundle 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"staticdata.sqlite"]; 

    if(sqlite3_open([path UTF8String], &database) == SQLITE_OK){ 
     const char *sql = "Insert into usersDates(dateDescription) VALUES (?)"; 
     sqlite3_stmt *init_statement; 
     sqlite3_bind_text(init_statement, 1, [refName UTF8String], -1, SQLITE_TRANSIENT); 


     if(!sqlite3_prepare_v2(database, sql, -1, &init_statement, NULL) == SQLITE_OK){ 
      NSAssert1(0, @"Failed to insert to database file with message '%s'.", sqlite3_errmsg(database)); 
     } 
     if(sqlite3_step(init_statement) != SQLITE_DONE) { 
      NSLog(@"Error: %s", sqlite3_errmsg(database)); 
     } else { 
      NSLog(@"Insert into row id = %d", sqlite3_last_insert_rowid(database)); 
     } 

     sqlite3_finalize(init_statement); 
    } else { 
     sqlite3_close(database); 
     NSAssert1(0, @"Failed to open database file with message '%s'.", sqlite3_errmsg(database)); 
    } 

} 

오류가 바인드 문에 발생하는 것 같습니다 :

여기 내 코드입니다. 데이터베이스가 실제로 열리고 refname이 내 메서드로 올바르게 전달되는지 확인했습니다.

아무도 도와 줄 수 있습니까? 보통은 핵심 데이터를 사용하지만 기존 프로젝트의 버그를 수정하는 것이므로 핵심 데이터로 전환 할 시간을 할당하지 않아도됩니다.

답변

2

귀하의 진술 순서가 잘못되었습니다. bind_()이 sqlite3_bind _ *() 루틴 prepare() SQLite bind() documentation

첫 번째 인수 후에 사용된다 sqlite3_prepare_v2() 또는 그 변종에서 반환 항상 sqlite3_stmt 객체에 대한 포인터입니다.

const char *sql = "Insert into usersDates(dateDescription) VALUES (?)"; 
    sqlite3_stmt *init_statement; 

    if(!sqlite3_prepare_v2(database, sql, -1, &init_statement, NULL) == SQLITE_OK){ 
     NSAssert1(0, @"Failed to prepare statement with message '%s'.", sqlite3_errmsg(database)); 
    } 
    sqlite3_bind_text(init_statement, 1, [refName UTF8String], -1, SQLITE_TRANSIENT); 

    sqlite_step(init_statement); 
+1

감사합니다. 그러나 어쨌든 당신을 감사하십시오 :) – Mick