
Работаем с базой данных
Мы весь день потратили на создание какого-то глупого класса, а результата не видно. Хорошо, возвращаемся на главную активность и в методе onCreate() напишем пару строчек.
Запустите проект. На первый взгляд ничего не произошло, но на самом деле в каталоге/data/data/ru.alexanderklimov.ru.databasedemo/databases появился файл cat_database.db. Вы можете в этом сами убедиться, если в эмуляторе откроете перспективу DDMS на вкладке File Explorer и просмотрите структуру файлов.
Надеюсь, вы поняли как происходит подготовка и создание базы данных. Теперь нам нужно научиться добавлять и извлекать данные из базы данных. Существуют различные способы для данных операций. Мы попробуем их все понемножку.
Вставка данных
Добавьте на экран главной активности кнопки и текстовые метки по вашему желанию. Не ограничивайте себя в фантазиях.
Первый способ. ContentValues
Первый способ вставки данных заключается в использовании класса ContentValues. Вот пример для кнопки, когда данные из текстового поля попадают в базу данных:
Способ очень удобен, требует мало кода и легко читаем. Вы создаёте экземпляр класса, а затем с помощью метода put()записываете в нужную колонку нужные данные. После чего вызывается метод insert(), который помещает подготовленные данные в таблицу.
Если колонок несколько, то вызывайте метод put() несколько раз:
У метода insert() три аргумента. В первом указывается имя таблицы, в которую будет вноситься записи. В третьем указывается объект ContentValues, созданный ранее. Второй аргумент используется для указания колонки. SQL не позволяет вставлять пустую запись, и если будет использоваться пустой ContentValue, то укажите во втором аргументе null во избежание ошибки.
Второй способ. SQL-запрос
Второй способ использует традиционный SQL-запрос INSERT INTO.... Вы формируете обычный запрос в виде строки, а затем передаёте её в метод execSQL(). Основное неудобство при этом способе - не запутаться в кавычках. Если что-то не вставляется, то смотрите логи сообщений.
Чтение данных.
Меня терзают смутные сомнения, что данные попали в базу данных, когда я нажимал на кнопки. Вас тоже? Давайте проверим. Добавим на экран ещё кнопки для извлечения данных.
Считывать данные также можно двумя способами. В любом случае результат возвращается в виде объекта Cursor. Не путайте его с курсором мыши, который бегает у вас на экране.
Первый способ. Метод query()
У метода query() множество параметров. В первом параметре укажите имя таблицы, во втором - массив имён колонок, далее идут дополнительные условия. Пока везде оставим null. Далее через цикл while извлекаем данные и помещаем в логи. Можете снова запустить проект и проверить, какие данные вы уже занесли в базу.
Второй способ. Метод rawQuery()
Второй способ использует сырой (raw) SQL-запрос. Сначала формируется строка запроса и скармливается методу rawQuery().
Итак, мы научились создавать базу данных, заносить данные и считывать данные. Изучите пример досконально, чтобы всё улеглось в голове. На следующих примерах мы расширим свои знания.
Полный листинг активности:
Естественно, мы можем вывести данные не только в лог, но и в адаптеры для Spinner или ListView. Добавьте на экран компонент Spinner и код при извлечении данных от запроса:
Мы разобрали простейший вариант базы данных с одной таблицей, состоящей из двух колонок: идентификатора и имён котов. В больших приложениях иногда используются несколько таблиц, содержащих по пять, шесть, семь колонок. Причём, записи в одной таблице связаны с записями другой таблицы. О создании таких таблиц в следующий раз.