LiteCoding

Заметки о программировании

Развертывание заранее созданной БД в приложении для Android

without comments

Как я уже неоднократно тут писал, задачи бывают разные. В этот раз мы будем говорить о случае, когда приложение поставляется с контентом «на борту». Согласитесь что, неразумно заставлять пользователя дожидаться окончания загрузки каталога книг, когда можно включить его в приложение, а затем при необходимости накатить обновления. Итак, что же нужно сделать, если перед вами возникла задача развернуть базу данных из ресурсов приложения на клиентском устройстве.

1. Конечно, сначала нужно создать свою БД. Я для этого пользуюсь плагином SQLite Manager для Firefox и не только (список поддерживаемого ПО находится тут).

2. После создания БД необходимо положить в директорию assets вашего проекта. Тут следует помнить про баг с обработкой сжатых ресурсов. Можно его обойти методом, описанным в той статье, или сменив расширение файла базы данных на jet. Я предпочитаю второй способ, чтобы не зависеть от периодического обновления инструментария SDK. Это вопрос личных предпочтений, не более того.

3. А теперь нам нужно развернуть БД. Для этого немного доработаем код из статьи в блоге ReignDesign. Честно говоря, и это не обязательно, но если есть желание сделать код чуть красивее и понятнее, а также переложить часть рутинной работы на плечи SQLiteOpenHelper‘a, то давайте попробуем.

3.1. Во-первых, избавимся от жестко прописанных путей в классе. Их можно либо передать в конструктор, либо вычислить при инициализации экземпляра класса. Например, путь к директории приложения можно получить из Context‘а в структуре ApplicationInfo.

3.2. Вносим косметические изменения по вкусу. Например, можно добавить методы для работы с сущностями, хранящимися в базе данных. Но я рекомендую не торопиться портить наш универсальный класс, а просто в каждом конкретном случае создать класс-наследник и реализовать DAO в нем.

В итоге у нас получится что-то похожее на этот класс. Пользоваться им очень просто:

DatabaseHelper dbHelper = new DatabaseHelper(this, "db/appdb.jet", "appdb.sqlite");
try
{
	dbHelper.createDataBase();
	dbHelper.openDataBase();
	//...тут работаем с БД
	dbHelper.close();
}
catch(Exception e)
{
	Log.e(TAG, "DatabaseHelper Exception", e);
}

В конструкторе мы передаем Context (а т.к. код вызывается из Activity, который является наследником Context‘а, то просто this), путь к копируемой БД относительно директории assets, желаемое имя файла БД. DatabaseHelper.createDatabase() копирует БД, если это необходимо. Остается только открыть ее, выполнить необходимые действия и закрыть.

Как видите, все это очень просто. Если у вас есть вопросы, замечания или пожелания, добро пожаловать в комментарии. Авторизоваться можно с помощью аккаунта Google, Yandex, социальных сетей.

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Tumblr

Written by Дмитрий Воробьев

Вторник, Июнь 21st, 2011 at 00:20

Leave a Reply

You must be logged in to post a comment.