мне нужно использовать sqlite3 finalize заявление два раза? - PullRequest
0 голосов
/ 24 февраля 2012
  //==================================================================
  - ( BOOL ) addNewSimpleTemplates:(NSString*)dbPath:(NSString*)title{
  //==================================================================

  BOOL returnVal = NO;

  NSString *maxValuePosition;

  if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 
  {
    NSString *selectSQL = [NSString stringWithFormat:@"select MAX(pr.position) FROM phrase_reference pr inner join storyboard_main_categories smc on smc.id = pr.main_category_id where smc.category_name = %@", @"'Simple Templates'"];

    const char *sql = [selectSQL UTF8String];

    sqlite3_stmt *selectStmt;

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

      while(sqlite3_step(selectStmt) == SQLITE_ROW) 
      {     
         ///
           // how to use finalise when using sqlite3_prepare_v2

             char *localityChars = (char*)sqlite3_column_text(selectStmt, 0);
         if (localityChars == NULL)
            maxValuePosition = nil;
          else
        maxValuePosition = [NSString stringWithUTF8String: localityChars];

        // increment the postion value
        int postion = [maxValuePosition intValue] + 1;

        //saving a new simple phrase is started here
        sql = "insert into storyboard_phrases(phrase) Values(?)";

        selectStmt = nil;

                 if(sqlite3_prepare_v2(database, sql, -1, &selectStmt, NULL) == 
                 SQLITE_OK){
               sqlite3_bind_text(selectStmt, 1, [title UTF8String], -1, 
                   SQLITE_TRANSIENT);
             }

          if(sqlite3_step(selectStmt) != SQLITE_DONE ) {

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

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

sqlite3_finalize(selectStmt);

}
  sqlite3_close(database);

}

Я хотел бы знать, как использовать, я имею в виду, сколько раз помещать оператор финализации sqlite 3 при многократном использовании sqlite3_prepare_v2.

Здесь, в моем методе выше, я использую sqlie3 prepare v2оператор два раза, так что мне нужно использовать оператор sqlite3 finalize два раза?

пожалуйста, дайте мне знать

1 Ответ

0 голосов
/ 25 февраля 2012

Вам обязательно нужно позвонить sqlite3_finalize на selectStmt, прежде чем установить nil.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...