Как сделать базу данных для андроид



Подключение существующей БД SQLite в Android Studio

Пример простого Android приложения, в котором подключаемся к заранее подготовленной базе данных SQLite.

Введение

Есть два подхода к работе с БД в Android приложениях.

В первом варианте БД создается в событии OnCreate главной активности. Данный вариант хорош для случая, когда база данных при установке приложения пуста либо заполнена небольшим количеством данных, а также в БД активно производятся записи в дальнейшем.

Но данный способ не очень хорош, если, например, пишите какой-нибудь справочник или другое приложение, когда БД при установке приложения уже должна быть заполнена большим количеством записей. На мой взгляд, в этом случае лучше БД подготовить заранее, а потом уже её подключить как отдельный файл в ресурсах приложения. В данной статье рассмотрен данный случай.

Создание базы данных

Для создания БД SQLite будем использовать, например, DB Browser for SQLite. Скачиваем и устанавливаем.

Буем создавать БД с одной таблицей такого вида.

_id name age
1 Anton 30
2 Alina 24
3 Dima 28
4 Dasha 23

Итак, создаем базу данных:

Где-нибудь сохраняем и называем, например, info.db :

Создаем таблицу, например, clients . И добавляем там поле:

Первым полем у нас будет номер записи _id . Поле будет также первичным ключом:

Аналогичным способом создаем поля age и name . И жмем OK :

В списке таблиц у нас появилась наша таблица clients :

Переходим в режим заполнения таблицы:

Выбираем там нашу таблицу и жмем Добавить запись :

Заполняем наши данные и сохраняем изменения в БД:

Файл подготовленной базы данных можно взять из архива: info.zip.

Создание Android проекта

Открываем Android Studio и создаем там новый проект с пустой активностью. Всё как обычно:

Разметка активности

Так как мы создаем простейшее приложение, но в XML файле активности разместим только кнопку и поле для вывода текста:

Подготовка Java кода

Нам потребуется обработать клик на кнопку button и что-то записать в textView .

Поэтому найдем данные компоненты и свяжем их в Java коде с XML:

Объявим переменные компонентов:

Найдем компоненты в XML разметке:

Пропишем обработчик клика кнопки:

Полный код Java файла (без строчки package , которая у вас должна быть своей):

Добавление БД в проект

Все приготовления сделаны. Теперь можем начать работать по теме статьи. Вначале добавим файл базы данных в проект.

Создадим папку assets в нашем проекте:

Скопируем файл нашей базы данных:

Добавление класса для работы с БД

Для открытия и подготовки БД в Android используется наследник класса SQLiteOpenHelper . Мы тоже создадим наследник этого класса DatabaseHelper , но он будет сильно модифицированный, так как мы будем работать с готовой базой данных, а не создавать ей с помощью SQL запросов:

Ниже приведен текст всего класса, который нужно просто скопировать (не трогая свой первой строчки package ):

Для работы в последующим с другими базами данных вам ничего не нужно будет менять в данном классе, кроме строчек:

Разберем что означают эти строчки.

DB_NAME — имя файла БД. Какой файл БД вы создали, такое название сюда и копируем.

DB_PATH — путь к БД. Каждое приложение в Android имеет свою область памяти, куда складываются файлы программы. Вдруг вы захотите вывернуть путь к файлу БД. Я бы ничего не трогал.

DB_VERSION — самая интересная переменная (причем в примерах в сети по работе с готовой БД её обходят стороной). Это номер версии БД. Ниже описан принцип работы данного класса. Например, вы пишите справочник рецептов под Android и рецепты храните в БД. В момент создания установки приложения программа должна скопировать БД на устройство. Потом через какое-то время вы решили обновить приложение, и БД у вас обновилась: структура БД поменялась, добавились новые рецепты. И вам нужно заменить старую БД на новую. Вот тут вы и пропишите в данной переменной новую версию БД. И при открытии приложения будет произведена проверки версии БД, и файл БД обновится. Вначале версия БД равна 1.

Итак, логика работы класса DatabaseHelper в подготовке базы данных:

Копируем файл БД, если этого файла нет (при установке приложения).

Если номер БД обновлен, то заменяем один файл базы данных на другой:

  • После работы с базой данных из данного класса вытаскиваем экземпляр SQLiteDatabase , с которым будем работать в дальнейшем: осуществлять запросы и так далее.

Подключаемся к БД

Перейдем в класс нашей активности. В нем создадим экземпляр класса DatabaseHelper , попытаемся обновить БД, если это требуется, а потом вытащим экземпляр SQLiteDatabase .

Создадим переменные в классе:

В методе onCreate выполним подготовительные действия:

Работа с базой данных

Теперь мы можем наконец в клике кнопки соединиться с базой данной и вытащить нужные нам данные.

Давайте при клике кнопки в textView отобразятся все имена учеников в строчку. Будем работать с помощью Cursor .

В setOnClickListener припишем такой, например, код:

Полный код Java файла активности у меня получился такой (без первой строчки package ):

Вот так приложение выглядит при запуске:

При нажатии на кнопку получим список имен из БД:

Фактически это всё. У нас есть экземпляр SQLiteDatabase mDb , с которым мы можем работать так как нам нужно. Дальше будут рассмотрены некоторые особенности работы с БД.

Обновление БД

Откроем в программе DB Browser for SQLite файл БД, который располагается в папке assets нашей программы. И внесем какие-нибудь изменения и сохраним. Я для примера поменял имя в первой строке таблицы:

Итак, в исходниках программы у нас файл БД поменялся. Запустим приложение.

И увидим, что в приложении изменения не проявились. Почему? Потому что приложение не обновляет файл БД каждый раз при запуске приложения. А вдруг вы записываете в БД какие-то записи: тогда при обновлении файла все добавленные записи сотрутся:

Нам нужно в файле класса DatabaseHelper поменять номер версии БД в сторону увеличения:

Теперь при запуске приложения данные обновятся:

Обратите внимание на то, что обновление БД произойдет только один раз. И до следующего изменения переменной DB_VERSION файл БД обновляться файлом из папки assets не будет.

Внимание! При обновлении БД заменяется файл БД, а, значит, все внесенные изменения в БД на приложении в Android (через запросы INSERT , UPDATE ) будут удалены! Поэтому, если вам внесенные изменения нужны, то не вызывайте метод updateDataBase , а в методе onUpgrade внесите стандартным способом обновления в БД. При этом замена файла БД не будет происходить. Например, так можно вставить в таблицу новый столбец:

Работа с большой БД

Когда готовил статью, то я часто встречал замечания, что файлы больше 1 Мб или 8 Мб из папки assets не копируются. Хотя, я пробовал работать с файлом в 14 Мб. Запускал на разных устройствах и никаких проблем не заметил.

Если что, то вот этот файл info_large.zip

Но мало ли. Вдруг у вас проблемы будут замечены. В качестве решения можно размещать файл БД не папке assets , а в папке res/raw :

И файл БД копируем в эту папку:

В классе DatabaseHelper нам нужно поменять только одну строчку в методе copyDBFile .

Да, если вы перед этим использовали старый вариант на том устройстве, где тестируете приложение, то не забудьте поменять версию базы данных DB_VERSION , а то вы не увидите изменений в базе данных. Можно также удалить приложение вначале, а заново его установить.

Полный код класса (без строчки package ):

Отображение списка данных по запросу

В примерах выше мы выводили информацию просто в строку в textView . Для демонстрации работы класса это достаточно, но чаще всего требуется данные из БД выводить списком. Напоследок приведу пример, когда на экран список людей из таблицы БД выведется не в строчку, а списком.

Делается это через обычный адаптер. Особенно не буду перегружать объяснением.

В activity_main.xml добавляем ListView :

Создадим файл разметки adapter_item.xml , в котором опишем внешний вид одного элемента списка с таким содержанием:

Добавим, например, в метод onCreate главной активности код:

Запускаем приложение. Видим список наших клиентов:

Помните, что запросы к БД могут быть длительными, поэтому работу с БД лучше запихивать в другой поток, например, через ASyncTask .

Добавление новых записей из Android приложения

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

И полный код примера файла активности с данным кодом (без строки package ):

Но я крайне не рекомендую добавлять новые записи в таблицу из-под Android приложения, если база данных представлена в виде файла. Так как если вы потом обновите файл базы данных в другой версии вашего приложения, то пользователь потеряет все свои данные. Либо пропишите бэкап пользовательских записей, либо используете для них вторую базу данных, созданную стандартным способом.

  • Android Studio icon.svg by Google Inc. / (2019-06-07)
  • Sqlite-square-icon.svg by Mike Toews / (2019-01-26)

Статья обновлена 2020-01-20

Пример простого Android приложения, в котором подключаемся к заранее подготовленной базе данных SQLite.

Пример простого Android приложения, в котором подключаемся к заранее подготовленной базе данных SQLite.

Источник

You may also like...

Adblock
detector