2012-02-17 10 views
0

私のアプリでは以下の機能を使用しています。最近sq-liteを使用し始めました。私は正しく動作するかどうかについて意見を聞きたいと思います。SqliteのファイナライズとDbロックの問題

私は検索時に私のアプリでロックされた問題に直面しているので、私はsqlite3 finalizeステートメントを使用する必要があることがわかった。私は確信して私は、あなたがログ右側にロックされた問題を取得する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

をお聞かせください手段がそれぞれに1つのファイナライズステートメントを配置する必要が声明

を準備sqlite3のかないのです何

データベースは、オープンであり、あなたがそう近いデータベースをそのデータベース内のいくつかの変更を行うと、アプリケーションを実行し、テーブルに挿入するために再度お試し...

これがあなたを助けることを願って..