Я разрабатываю приложение Android. Это имеет несколько потоков, читающих из и пишущих в базу данных Android SQLite. Я получаю следующую ошибку:
SQLiteException: код ошибки 5: база данных заблокирована
Я понимаю, что SQLite блокирует весь дб на вставке/обновлении, но эти ошибки только, кажется, происходят при вставке/обновлении, в то время как я выполняю запрос Select. Запрос Select возвращает курсор, который оставляют открытым настоящая хитрость (несколько секунд несколько раз), в то время как я выполняю итерации по нему. Если запрос Select не работает, я никогда не получаю блокировки. Я удивлен, что выбор мог заблокировать дб. Действительно ли это возможно, или что-то еще продолжается?
Что лучший способ состоит в том, чтобы избежать таких блокировок?
Избегая оставлять курсоры открытыми на "довольно долгое время". Если вы можете позволить себе иметь все данные в памяти сразу, то так и делайте.
Если не можете, попробуйте увеличить таймаут занятости.