Zajmuję się tworzeniem aplikacji dla systemu Android. Ma wiele wątków odczytywanych i zapisujących w bazie danych SQLite Android. Otrzymuję następujący błąd:Jak uniknąć błędów blokowania SQLiteException
SQLiteException: error code 5: database is locked
rozumiem SQLite blokuje całą db na Wkładanie/aktualizacji, ale błędy te tylko wydają się zdarzyć podczas wstawiania/aktualizacji podczas gdy biegnę kwerendę wybierającą. Zapytanie select zwraca kursor, który jest otwarty dość mocno (kilka sekund kilka razy), podczas gdy I iteracji nad nim. Jeśli kwerenda wyboru nie jest uruchomiona, nigdy nie otrzymam blokad. Jestem zaskoczony, że wybrany może zablokować db. Czy to możliwe, czy dzieje się coś innego?
Jaki jest najlepszy sposób na uniknięcie takich zamków?
można powiedzieć pozostawiając kursor otwarte na chwilę. Uważam, że mam ten sam problem, ale moje kursory są obsługiwane przez listView. Czy zdołałeś kiedyś to naprawić? – taer
Tak Naprawiłem to poprzez natychmiastowe odczytanie zawartości kursora w kolekcji, zamknięcie kursora, a następnie iterację nad kolekcją, aby wykonać czasochłonną pracę. Jeśli używasz listView, powinieneś móc zrobić to samo i użyć ArrayAdapter lub napisać własny adapter rozszerzający ArrayAdapter. – TheArchedOne
http://stackoverflow.com/questions/7657223/sqlite-exception-database-is-locked-issue/9503044#9503044 – junto