Страницы

Поиск по вопросам

вторник, 16 июля 2019 г.

Правильная работа с SQLite-базой в Android

Есть готовая БД, лежащая в assets, которая копируется в папку приложения (ну, как обычно, в /data/data/app_name/databases). Создание и копирование происходит во внешнем (обычном new Thread()) потоке при старте приложения. За идею взята эта статья: линк У многих пользователей появляются разные ошибки при старте приложения, а у других все работает. Сдается мне, что описанный подход распространения готовой БД ошибочен, либо содержит неточности, которые нужно знать. Как вариант, есть мысль хранить данные не в базе, а в файле, который при возникновении ошибок снова парсится и заполняется база в методе onCreate() SQLiteOpenHelper Как вы решаете перенос готовой базы в приложение? Как работаете со своей БД? Есть куча туториалов и все как один создают структуру БД в onCreate(), делают апдейт в onUpgrade(), но готовая база распространяется в основном, как описано по ссылке. Ошибки, возникающие при таком подходе (из статьи по ссылке): No such table android_metadata. Правда автор статьи это исправил созданием этой таблице в готовой БД, но подход сомнителен, ибо система сама создает эту таблицу в каждой базе. Теперь вот поймал ошибку такую: Issues На некоторых девайсах было, что при открытом коннекте после вызова getReadableDataBase() валится приложение (например, на HTC Desire).


Ответ

Правильная работа с БД в Android - это наследование SQLiteOpenHelper и переопределение методов onCreate и onUpgrade. В первом мы создаем базу данных. Например, можем распарсить данные и создать бд. Во втором мы обновляем базу, удаляя ею старую версию. Когда мы получаем объект БД и в дальнейшем вызываем getReadableDatabase()/ getWritableDatabase() вызывается наш метод onCreate() и если база не создана, она будет создана вновь. Можно также переопределить и эти методы. Но обычно так не делается. Все выше изложенное из моей практики.

Комментариев нет:

Отправить комментарий