2012-02-17 3 views
0

내 응용 프로그램에서 아래 기능을 사용하고 있으며 최근에 sq-lite를 사용하기 시작했으며 올바르게 사용하고 있다는 의견을 듣고 싶습니다.Sqlite finalize 및 Db locking 문제

나는 내 데이터베이스에 문제가 잠겨있어 문제가 발생했을 때 검색 할 때 sqlite3 문을 사용해야한다는 것을 알았습니다.

내가 확실하지 오전은 내가,

당신이 로그 오른쪽 잠금 문제를 얻을 HII 나

- (BOOL) addNewCate:(NSString*)dbPath:(NSString*)title:(NSString*)tierOneID:(NSString*)tierTwoID{ 

    BOOL returnVal = NO; 

    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 
    { 
     const char *sql = "insert into storyboard_phrases(phrase) Values(?)"; 

     sqlite3_stmt *addStmt; 

     if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) == SQLITE_OK){ 

      sqlite3_bind_text(addStmt, 1, [title UTF8String], -1, SQLITE_TRANSIENT); 
     } 

     if(sqlite3_step(addStmt) != SQLITE_DONE) { 

      NSLog(@"Error: %s", sqlite3_errmsg(database)); 

     } else { 

      NSLog(@"Insert into row id = %d", sqlite3_last_insert_rowid(database)); 

      int ph_id = sqlite3_last_insert_rowid(database); 

      int sub_category_id = [tierTwoID intValue]; 

      int main_category_id = [tierOneID intValue]; 

      addStmt = nil; 

      sql = "insert into phrase_reference(phrase_id, sub_category_id,main_category_id) Values(?,?,?)"; 

      if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) == SQLITE_OK){ 

       sqlite3_bind_int(addStmt, 1, ph_id); 

       sqlite3_bind_int(addStmt, 2, sub_category_id); 

       sqlite3_bind_int(addStmt, 3, main_category_id); 

      } 

      if(sqlite3_step(addStmt) != SQLITE_DONE) { 

       NSLog(@"Error: %s", sqlite3_errmsg(database)); 

      } else { 

       NSLog(@"Insert into row id = %d", sqlite3_last_insert_rowid(database)); 
       returnVal = YES; 


      } 

     } 
     sqlite3_finalize(addStmt); 

    } 
    sqlite3_close(database); 

    return returnVal; 
} 

답변

0

을 알려 주시기 바랍니다 문장을 준비 sqlite3를 각각 하나의 마무리 문을 배치해야합니다 수단 그렇게 할 것입니다 데이터베이스는 개방 그리고 당신은 ... 해당 데이터베이스 그래서 가까운 데이터베이스의 일부 변경을하고 응용 프로그램을 실행하고 테이블에 삽입 다시 시도

이것이 당신을 도울 수 있기를 희망합니다 ..