| Предыдущий | Следующий |
| SQLITE_E_BUSY | SQLITE_E_NOMEM |
SQLITE_E_LOCKED
Что означает результат
SQLITE_E_LOCKED: SQLite сообщает SQLITE_LOCKED: операция конфликтует с блокировкой таблицы/schema/shared-cache внутри связанного database context. Это отличается от SQLITE_BUSY, где конкуренция обычно идёт между отдельными connections/processes.
Что проверить
- Сохраните SQL statement, connection и transaction state.
- Проверьте shared-cache, открытые cursors/prepared statements и незавершённые schema operations.
- Закройте или reset statement, удерживающий внутреннюю блокировку, до retry.
- Не лечите SQLITE_LOCKED только busy_timeout: он предназначен прежде всего для SQLITE_BUSY.
Диагностика и исправление
Освободите конфликтующую внутреннюю lock/statement и повторите операцию после корректного завершения transaction/cursor.
Ссылки по этому результату
Диагностика и проверка
SQLITE_LOCKED означает конфликт блокировки таблицы, schema или shared cache в текущем SQLite context. Зафиксируйте активные prepared statements/transactions на каждом connection и объект, который остаётся locked. Завершите statement либо транзакцию-владельца и повторите операцию. В отличие от BUSY_RECOVERY, здесь не требуется ждать внешнее восстановление journal; нужно освободить логическую SQLite lock внутри контекста.
Нужно найти другой код? Найти другой код состояния или ошибки.