Должен ли я использовать sqlite3_finalize после того, как я выполнил запрос с sqlite3_exec? - PullRequest
3 голосов
/ 12 ноября 2009

Я использую Sqlite3 в своем приложении для iPhone, я получал некоторые нежелательные откаты, по-видимому, случайным образом, однако я не знаю, связано ли это с тем, что я не завершаю утверждения с помощью sqlite3_finalize, поскольку, насколько я знаю, sqlite3_exec заботится об этом.

Также я нашел несколько SELECT с sqlite3_prepare_v2, которые я не завершил, поэтому я знаю, что должен завершить их, однако я должен сделать то же самое с теми, что в sqlite3_exec?

Один из примеров моих заявлений:

NSString *query=@"UPDATE books SET title='newName' WHERE id='21';";
if ((result=sqlite3_open([database UTF8String], &_database))==SQLITE_OK) {
    result=sqlite3_exec(_database, [query UTF8String],NULL,NULL,&errorMsg);
    if (result!=SQLITE_OK) {
        printf("\n%s",errorMsg);
        sqlite3_free(errorMsg);
    }
    sqlite3_close(_database);
}

Должен ли я sqlite3_finalize(result) перед закрытием базы данных?

Ответы [ 2 ]

10 голосов
/ 12 ноября 2009

Нет. Вам не нужно, потому что функция sqlite3_finalize() вызывается для удаления подготовленного оператора , который создается с помощью sqlite3_prepare_v2() или связанной функции.

1 голос
/ 13 февраля 2012

Нет необходимости вызывать sqlite3_finalize () при работе с sqlite3_exec. Это потому, что sqlite3_exec является ярлыком для 3 функций:

  1. sqlite3_prepare_v2 ()
  2. sqlite3_step ()
  3. sqlite3_finalize ()

Вы также можете прочитать об этом в небольшом учебнике по sqlite по адресу: http://www.iosdevelopment.be/sqlite-tutorial/

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