SQLite / C API - Закрытие базы данных - Есть ли официальная ошибка в документации? - PullRequest
0 голосов
/ 18 февраля 2020

В официальной документации SQLite по C API (www*1002*) для вызова API sqlite3_close() Я могу прочитать это:

Закрытие соединения с базой данных

int sqlite3_close(sqlite3*); 
int sqlite3_close_v2(sqlite3*); 

Процедуры sqlite3_close() и sqlite3_close_v2() являются деструкторами для объекта sqlite3. Вызовы sqlite3_close() и sqlite3_close_v2() возвращают SQLITE_OK, если объект sqlite3 успешно уничтожен и все связанные ресурсы освобождены.

Если соединение с базой данных связано с незавершенными подготовленными операторами или незавершенными sqlite3_backup объекты затем sqlite3_close() оставят соединение с базой данных открытым и вернут SQLITE_BUSY.

Как эти две функции с возвращаемым значением int могут вернуть строку SQLITE_OK и SQLITE_BUSY? Это невозможно. Где я могу поймать строки, возвращаемые функциями? Я думал об использовании sqlite3_errmsg() (www*1031*) следующим образом:

do{
    sqlite3_close(my_db);
}
while(strcmp(sqlite3_errmsg(my_db),"SQLITE_BUSY") == 0);

Это приводит к большому количеству вызовов API, которые, вероятно, нагружают базу данных. У кого-нибудь есть лучшее решение?

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