Хранение данных в базе данных SQLite

База данных идеальный вариант для хранения повторяющихся или структурированных данных, например таких, как контакты. В данном уроке мы предполагаем, что вы уже знакомы в общих чертах с SQL базами данных, и здесь мы рассмотрим использование баз данных SQLite в Android. API, необходимое для работы с базами данных в Android, доступно в пакете android.database.sqlite

Создание схемы и контракта базы данных

Один из основных принципов баз данных SQL – это схема: формальное описание организации базы данных. Схема отражается в SQL запросах, которые вы используете для создания базы данных. Вам может пригодиться создание класса-спутника, известного как класс контракта (contract class), который явно задает разметку схемы самодокументируемым путем.

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

Хорошей практикой организации класса контракта является помещение всех глобальных для всей базы констант в корневой уровень класса. После этого создайте внутренние классы для каждой из таблиц и перечислите в них все столбцы.

Примечание: при реализации интерфейса BaseColumns, ваши внутренние классы могут наследовать первичный ключ _ID, который некоторые классы Android, такие как адаптеры курсоров, ожидают обнаружить. Это необязательное требование, однако это поможет вам легко и без проблем работать с классами, предоставляемыми Android.

Пример описания имени таблицы и столбцов:

Создание базы данных с использованием SQL помощника.

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

Также как и при хранении приватных файлов во внутреннем хранилище, для хранения файлов баз данных Android выделяет приватное дисковое пространство, ассоциированное с приложением. Данные будут защищены, поскольку никакое другое приложение может получить к ним доступ.

Полезный набор интерфейсов доступен в классе SQLiteOpenHelper. Когда вы используете данный класс для получения ссылки на базу данных, система выполняет потенциально длительные операции по созданию и обновлению базы данных только когда это необходимо и не во время запуска приложения. Все, что вам нужно это вызвать метод getWritableDatabase() или getReadableDatabase().

Примечание: поскольку данные методы могут выполняться длительное время, вызывайте их в отдельном потоке, с помощью AsyncTask или IntentService

Для использования SQLiteOpenHelper, создайте подкласс и переопределите методы обратного вызова onCreate(), onUpgrade() и onOpen(). Можете также переопределить onDowngrade(), но это необязательно.

Пример объявления SQLiteHelper:

Для доступа к базе данных, создайте экземпляр вашего наследника SQLiteHelper:

Запись данных в базу данных

Для записи в базу данных необходимо передать объект типа ContentValue в метод insert():

Первый аргумент метода insert() это имя таблицы. Второй аргумент предоставляет имя столбца, в который будет вставлено значение NULL, если ContentValue пуст. Если передать в качестве второго значения null, то строка не будет вставлена, если нет данных.

Чтение информации из базы данных

Для чтения информации из базы данных, используйте метод query(), передав в него критерии отбора и названия нужных столбцов. Метод сочетает в себе элементы, вставленные и обновленные с помощью методов insert() и update(). Результат отбора возвращается в виде объекта типа Cursor.

Чтобы просматривать записи с помощью курсора, используйте один из методов перемещения класса Cursor, который нужно вызвать перед чтением значений. Обычно вы будете пользоваться методом moveToFirst(), чтобы установить курсор на первый элемент набора записей. Получать значения каждой из строк можно используя один из get методов класса Cursor, например getString() или getLong(). Для каждого get метода необходимо порядковый номер нужного столбца. Порядковый номер можно получить с помощью методов getColumnIndex() или getColumnIndexOrThrow(). Например:

Удаление информации из базы данных

Для удаления строки из таблицы, необходимо создать критерии отбора для таких строк. Интерфейс работы с базами данных предоставляет механизм для создания условий отбора, защищенных от SQL иньекций. Данный механизм делит спецификацию отбора на две части: условие отбора и аргументы отбора. Условие отбора описывает какие нужны столбцы и позволяет их комбинировать. Аргументы это значения для проверки столбцов, указанных в условии. Поскольку результат обрабатывается другими способами, нежели обычные SQL запросы, это позволяет защититься от SQL-иньекций.

Обновление базы данных

Если необходимо обновить некоторый набор значений в базе данных, используйте метод update().

Синтаксис работы с методом сочетает в себе указание значений данных как в методе insert() и указание условия where как в методе delete().

Добавить комментарий