Создание первоначальных данных в БД приложения

226
13 апреля 2018, 18:26

Нужно каким то образом при первом запуске создавать БД с рецептами блюд, чтобы затем их просто подгружать из БД и все. Как это можно сделать? Или может запихнуть БД в сам apk?

Answer 1

Можно поместить готовую БД в APK. Это предпочтительнее, потому что на компьютере подготоваить БД проще и есть возможность нормально протестировать запросы, перед тем, как использовать для выборки курсоров.

Для заполнения и тестиривания БД я пользовался SQLite Expert Personal Edition - бесплатный и довольно мощный менеджер баз SQLite, выполняющий практически все функции, которые есть в платных аналогах. Можно там и запросы протестировать, получив наглядный результат, а не курсор, в который не посмотришь.

Готовая база данных ложится в каталог /assets приложения простым копированием файла в эту папку проекта, но работать оттуда она не может, так как эта папка для статических (неизменяемых) ресурсов и должна быть скопирована в раздел на устройстве, выделенный для вашего приложения (обычно /data//data/<package_name>/databases/), где вашему приложению разрешена запись и прочие операции работы с файлами.
Сделать это можно с помощью собственного кода (пример) или готовой библиотеки android-sqlite-asset-helper, что предпочтительнее (тогда база ложится в каталог assets/database/ приложения)

После копирования пользоваться этой БД нужно точно так же, как если бы она была создана прямо на устройстве. Фактическая разница только в том, что в первом случае БД туда копируется, во втором изначально создается там.

PS: Если размер начальной БД (то, что вы помещаете в каталог assets/) более одного мегабайта, то расширение для БД должно быть указано, как для несжимаемого типа данных (*.png, *.mp3), а не *.bd или там *.sqlite - это связано с тем, что каталог assets/ подвергается сжатию и существует ограничение на размер файлов для этой операции в 1 Мб.

Можно так же и заполнить БД прямо на устройстве. Для этого придется создать какую то структуру с данными, вроде XML или JSON файла, распарсив который вы будете заполнять свою БД запись за записью. Это дольше на первом старте приложения, чем копирование готовой БД и не так удобно для тестирования, но несколько меньше по итоговому размеру APK и не имеет никаких ограничений по начальному размеру БД.

READ ALSO
Опции cascade в Hibernate

Опции cascade в Hibernate

Существует 7 вариантов опции cascade у HibernateХотелось бы уточнить какого именно поведения ожидать от каждой из них

201
TabLayout - underline невыбранной вкладки android 4.1.1 (16 api)

TabLayout - underline невыбранной вкладки android 4.1.1 (16 api)

Заметил такую проблему на андройде 41

365
Можно ли сравнить int и null?

Можно ли сравнить int и null?

Такая конструкция

279