Objective C, SQLite, ошибка при создании инструкции update . не ошибка

#ios #objective-c #sqlite #sql-update

#iOS #objective-c #sqlite #sql-обновление

Вопрос:

Это первый раз, когда я столкнулся с инструкцией UPDATE в SQLITE. Основываясь на том, что я нашел, я придумал этот метод, который, ну, не работает) Сам оператор работает нормально, я его проверил. И значения result и SQLITE_OK по какой-то причине равны 0. Итак, где это пошло не так? Спасибо.

 - (BOOL) archiveArticle:(Article *) article
{
    NSString *sql = [NSString stringWithFormat:@"UPDATE UserArticle SET archived = ? WHERE article_id=? AND user_id=?"];

    sqlite3_stmt *update;
    int result = sqlite3_prepare_v2(self.db, [sql UTF8String], -1, amp;update, NULL);
    NSLog(@"archiveArticle: Before IF %d %d",result, SQLITE_OK);
    if (result == SQLITE_OK){
        NSLog(@"archiveArticle: Article was archived!");
        return true;
    }else{
        NSLog(@"archiveArticle: Error while creating update statement. %s", sqlite3_errmsg(self.db));
        return false;
    }
    sqlite3_bind_int(update, 1, 1);

    sqlite3_bind_int(update, 2 , article.article_id);

    sqlite3_bind_int(update, 3 , 16);


    char* errmsg;
    sqlite3_exec(self.db, "COMMIT", NULL, NULL, amp;errmsg);

    if(SQLITE_DONE != sqlite3_step(update))
        NSLog(@"Error while updating. %s", sqlite3_errmsg(self.db));

    sqlite3_finalize(update);
    return false;
}
  

Ответ №1:

Проблема связана с этой частью кода:

 if (result == SQLITE_OK){
        NSLog(@"archiveArticle: Article was archived!");
        return true;
    }else{
        NSLog(@"archiveArticle: Error while creating update statement. %s", sqlite3_errmsg(self.db));
        return false;
    }
  

Вы возвращаетесь из метода, поэтому оставшийся код не будет выполнен. Итак,

 sqlite3_exec(self.db, "COMMIT", NULL, NULL, amp;errmsg);
  

не будет работать, и данные не будут обновлены.

Комментарии:

1. О, конечно. Я пытаюсь что-то сделать после возвращения. Как глупо с моей стороны)) Большое вам спасибо 🙂