Android Sqlite - unable to open database file (code 14)

Информация, статьи, патчи, исходные коды и т.д.
Post Reply
sva
Администратор
Posts: 125
Joined: 01 May 2015, 19:56

Android Sqlite - unable to open database file (code 14)

Post by sva »

Намедни писал на java и тестил программу под Android 5.0.2, котораю юзала sqlite. Сама БД на одну таблицу с 11 тыс. записями. Прочитал гору практических мануалов в интернете и сделал по таким принципам:
  • - работа с БД строится в потомке класса SQLiteOpenHelper;
  • на этапе первого запуска я переношу её в директорию "/data/data/<PACKAGE NAME>/databases/";
  • для выборки данных используются класс Cursor;
  • работа с БД в режиме только чтение.
Короче, всё было хорошо, пока количество запросов не стало очень большим. По несколько десятков за одну секунду. Тогда стало выскакивать исключение: SQLiteReadOnlyDatabaseException: attempt to write a readonly database при обращении к методу Cursor.moveToFirst. По решениям из интернета надо было дать доступ на запись в БД.

Попробовал дать разрешение на запись и стала вываливаться другое исключение: SQLiteCantOpenDatabaseException: unable to open database file (code 14). Это исключение имеет уровень загадочности 80-го уровня, поэтому перечитал кучи статей и мануалов, я не нашёл действенных решений, потому что ни одно из них не помогло. Как и всем вопрошавшим в интернете. Но натолкнуло на мысль, что всё зависит от конкретной версии Андроида.

Тогда я подключил другой Андроид аппарат и получил другое исключение: Cursor window allocation of 2048 kb failed. В результате выяснилось, что оно может возникать, если очень часто использовать и не закрывать классы Cursor. А именно это и происходило в примерах по sqlite, которые я брал за основу.

Как не странно, но решение проблемы с исключением unable to open database file (code 14) я нашёл в обязательном закрытии класса Cursor после его использования через его метод close().
Post Reply