Презентацию к данной лекции можно скачать здесь.
Будем двигаться дальше в рассмотрении вопросов связанных с разработкой приложений для смартфонов.
Современное программирование трудно представить без использования баз данных, рано или поздно в процессе развития приложения появляется осознание необходимости долговременного хранения и обработки структурированной информации. Данная лекция посвящена рассмотрению вопросов, связанных с использованием баз данных SQLite в приложениях, разрабатываемых под Android. Базы данных SQLite являются основой построения рабочей и функциональной программы, в которой необходимо работать с большими объемами структурированной информации.
Далее в лекции перейдем к рассмотрению таких интересных тем, как создание графических изображений и анимации, а также работа с этими элементами. Платформа Android предоставляет разнообразные способы для добавления в приложения и использования графики и анимации.
Очень часто мобильные устройства помогают "скоротать время" в очередях, в ожидании транспорта и многих других ситуациях, часто возникающих в современной жизни. Проще всего в такие моменты занять себя несложной игрой, в связи с этим тема разработки игр для мобильных устройств стала довольно популярна в последнее время. Разумеется, разработка игр дело серьезное, но даже отдельному разработчику по силам создать игру, способную увлечь пользователя. В данной теме рассмотрим основные принципы создания игр для смартфонов, в лабораторной работе рассмотрим процесс создания несложной игры.
SQLite - небольшая и при этом мощная система управления базами данных. Эта система создана в 2000 году, ее разработчик доктор Ричард Хипп (Dr. Richard Hipp). В настоящее время является одной из самых распространенных SQL-систем управления базами данных в мире. Можно выделить несколько причин такой популярности SQLite: она бесплатная; она маленькая, примерно 150 Кбайт; не требует установки и администрирования. Подробнее см. http://www.sqlite.org.
База данных SQLite - это обычный файл, его можно перемещать и копировать на другую систему (например, с телефона на рабочий компьютер) и она будет отлично работать. Android хранит файл базы данных приложения в папке (см. рис. 16.1.):
data/data/packagename/databases/,
где packagename - имя пакета, в котором расположено приложение.
Для доступа к этому файлу необходимо запускать команды SQL, Android с помощью вспомогательных классов и удобных методов скрывает часть деталей, но все таки необходимо иметь хотя бы минимальные знания об SQL, чтобы пользоваться этими инструментами.
Обращения к базе данных SQL выполняются посредством запросов, существует три основных вида SQL запросов: DDL, Modification и Query.
Пример запроса для создания таблицы:
create Table_Name ( _id integer primary key autoincrement, field_name_1 text, field_name_2 text);
Стоит иметь в виду, что в SQLite, в отличие от многих других баз данных, типы данных столбцов являются лишь подсказкой, т. е. не вызовет никаких нареканий попытка записать строку в столбец, предназначенный для хранения целых чисел или наоборот. Этот факт можно рассматривать, как особенность базы данных, а не как ошибку, на это обращают внимание авторы SQLite.
Пример запроса на добавление строки:
insert into Table_Name values(null, value1, value2);
При добавлении можно указывать столбцы, в которые будут размещаться значения, остальные столбцы заполнятся значениями по умолчанию, в этом случае можно добавлять элементы в измененном порядке. Пример такого запроса:
insert into Table_Name(field_name_2, field_name_1) values(value2, value1);
Примеры запросов на изменение строки:
update Table_Name set Field_Name_1 = value;
поменяет значение столбца Field_Name_1 на value во всей таблице;
update Table_Name set Field_Name_1 = value where _id = smth;
Примеры запросов на удаление строк:
delete from Table_Name; delete from Table_Name where Field_Name_1 = smth;
первый запрос удаляет все строки таблицы, второй - только те строки, в которых столбец Field_Name_1 имеет значение smth.
select * from Table_Name where (_id = smth); select Field_Name_1, Field_Name_2 from Table_Name Field_Name_1 = smth);
Первый запрос выводит строку с _id равным smth, второй - выводит два элемента Field_Name_1 и Field_Name_2 строк, в которых Field_Name_1 равен smth.
Вернемся к рассмотрению вопросов, связанных с использованием базы данных SQLite в приложениях под Android. Любая база данных, созданная в приложении доступна любому классу приложения, но недоступна из вне. Чтобы открыть доступ к базе данных другим приложениям необходимо использовать контент-провайдеры (Content Providers).
Для создания и обновления базы данных в Android предусмотрен класс SQLiteOpenHelper. При разработке приложения, работающего с базами данных, необходимо создать класс-наследник от SQLiteOpenHelper, в котором обязательно реализовать методы:
onCreate() | - вызывается при первом создании базы данных; |
onUpgrade() | - вызывается, когда необходимо обновить базу данных. |
По желанию можно реализовать метод:
В этом же классе имеет смысл объявить строковые константы, в которых определить названия таблиц и столбцов. Полученный класс позаботится об открытии базы данных, если она существует, или о создании ее в противном случае, а так же об обновлении базы данных в случае необходимости.
В Android предусмотрен класс для работы с базой данных SQLite напрямую, этот класс называется SQLiteDatabase и содержит методы:
openDatabase() | - позволяет открыть базу данных; |
update() | - позволяет обновить строки таблицы базы данных; |
insert() | - позволяет добавлять строки в таблицу базы данных; |
delete() | - позволяет удалять строки из таблицы базы данных; |
query() | - позволяет составлять запросы к базе данных; |
execSQL() | - позволяет выполнять запросы к базе данных. |
Для добавления новых строк в таблицу используется класс ContentValues, каждый объект этого класса представляет собой одну строку таблицы и выглядит как ассоциативный массив с именами столбцов и значениями, которые им соответствуют.
Для получения результатов запросов к базе данных используется класс Cursor, объекты этого класса ссылаются на результирующий набор данных, позволяют управлять текущей позицией в возвращаемом при запросе наборе данных.
Для предоставления доступа к данным для других приложений можно использовать контент-провайдеры (ContentProvider). Любая информация, управляемая контент-провайдером адресуется посредством URI:
content://authority/path/id
где:
content:// | - стандартный требуемый префикс; |
authority | - имя провайдера, рекомендуется использовать полное квалификационное имя пакета для избежания конфликта имен; |
path | - виртуальная папка внутри провайдера, которая определяет вид запрашиваемых данных; |
id | - первичный ключ отдельной запрошенной записи, для запроса всех записей определенного типа этот параметр не указывается. |
Контент-провайдеры поддерживают стандартный синтаксис запросов для чтения, изменения, вставки и удаления данных.
Подробнее работу с SQLite базами данных в приложениях под Android рассмотрим в первой части лабораторной работы в этой теме.