![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Если новый вызов API sqlite3_* при связи с
соединением с базой данных D провалился,
sqlite3_errcode(D) возвращает числовой код результата
или расширенный код результата.
sqlite3_extended_errcode() это то же самое за исключением того, что это
всегда возвращает расширенный код результата
, даже когда расширенные коды результата отключены. Значения, возвращенные sqlite3_errcode() и/или
sqlite3_extended_errcode(), могли бы измениться с каждым вызовом API.
Кроме того, есть некоторые интерфейсы, которые, как гарантируют, никогда не
изменят значение кода ошибки. Интерфейсы сохранения кода
ошибки включают следующие: sqlite3_errmsg() и sqlite3_errmsg16() вернут текст на английском,
который описывает ошибку, как UTF-8 или как UTF-16, соответственно.
Памятью, чтобы хранить последовательность сообщения об ошибке управляют
внутренне. Приложение не должно волноваться об освобождении результата.
Однако, строка ошибки могла бы быть переписана или освобождена последующими
обращениями к другим функциям интерфейса SQLite. sqlite3_errstr() возвращает англоязычный текст, который описывает
код результата, как UTF-8.
Памятью, чтобы хранить последовательность сообщения об ошибке, управляют
внутренне и приложение не должно ее освободить. Если новая ошибка ссылается на определенный символ во входе SQL,
SQL, sqlite3_error_offset() возвращает байтовое смещение от начала того
символа. Байтовое смещение, возвращенное sqlite3_error_offset(),
предполагает, что вход SQL является UTF8. Если новая ошибка не ссылается на
определенный символ во входе SQL, то sqlite3_error_offset() вернет -1. Когда преобразовано в последовательную форму
многопоточный режим используется,
могло бы иметь место, что вторая ошибка происходит в отдельном потоке
в промежуточное время между первой ошибкой и вызовом этих интерфейсов.
Когда это произойдет, о второй ошибке сообщат, так как эти интерфейсы всегда
сообщают о новом результате. Чтобы избежать этого, каждый поток
может получить исключительное использование
соединения с базой данных D вызовом
sqlite3_mutex_enter(
sqlite3_db_mutex(D)) до начала использования
D и вызвать sqlite3_mutex_leave
(sqlite3_db_mutex(D))
после того, как все обращения к интерфейсам, перечисленным
здесь, будут закончены. Если интерфейс терпит неудачу с SQLITE_MISUSE, это означает, что интерфейс
был вызван неправильно приложением.
В этом случае код ошибки и сообщение могут или не могут быть установлены.
Choose any three.
SQLite C Interface
Коды ошибок и сообщения
int sqlite3_errcode(sqlite3 *db);
int sqlite3_extended_errcode(sqlite3 *db);
const char *sqlite3_errmsg(sqlite3*);
const void *sqlite3_errmsg16(sqlite3*);
const char *sqlite3_errstr(int);
int sqlite3_error_offset(sqlite3 *db);