Android – одна из самых популярных мобильных операционных систем, которая с каждым годом становится все более совершенной и безопасной. Это основной конкурент iOS от компании Apple.
Под Андроид можно писать не только офисные приложения, но и игры, а также разнообразные утилиты. В процессе программист нередко работает с базой данных. В этой статье будет рассказано о том, как взаимодействует MySQL с Android. Также рассмотрим ключевые особенности ОС и упомянутой БД.
Особенности Android
Андроид – операционная система для мобильных устройств с открытым исходным кодом. Создана на основе модифицированного ядра Линукс. Для нее ведется активная разработка программ и игр.
К преимуществам Android можно отнести:
- доступность;
- свободное распространение;
- наличие разнообразных виджетов;
- возможность расширения памяти;
- удобные конфигурационные параметры, дающие возможность придать системе индивидуальный вид;
- разнообразие контента.
Для того, чтобы писать под Андроид, можно выучить Java. Именно данный язык программирования является официальным для Android-разработки. Его сможет освоить даже новичок.
Другие ЯП тоже весьма активно используются для написания программного обеспечения для рассматриваемой операционной системы. Это предоставляет некую свободу выбора программисту.
К недостаткам Android относят:
- необходимость иметь Google-аккаунт для полноценной работы с возможностями;
- обновления, которые много весят и не всегда «встают ровно»;
- наличие всплывающих окон;
- иногда – не самая высокая производительность.
Несмотря на недостатки, данная ОС все равно пользуется популярностью. Она встречается в системах смарт-часов, а также «умных» устройств.
База данных – определение
Перед тем, как работать с БД, нужно выяснить, что это вообще такое. Существуют различные трактовки термина. Акцент будет сделан непосредственно на программирование и разработку.
База данных – это совокупность данных, отражающая состояние объектов и их отношений в рассматриваемой предметной области. Так называют место хранения электронных материалов. Применяется подобная схема в клиент-серверной архитектуре.
База данных в программировании и разработке чаще всего представляет собой список или таблицу с упорядоченными сведениями. Обычно включает в себя множество электронных материалов. Не требуется, если планируется создание небольшой утилиты.
Пример примитивной БД — это таблица в Excel. Там есть колонки с заголовками, а также необходимая пользователю информация. База данных может быть:
- Реляционной. В ней есть набор таблиц, который будет храниться в пределах одного пространства.
- Файловой. Данные в таких «хранилищах» находятся в виде отдельных текстовых файлов.
- Сетевой.
Сконцентрироваться при создании софта для Android стоит на реляционных моделях. Один из наглядных примеров – это MySQL.
MySQL – это…
MySQL – это реляционная база данных. Создана шведскими разработчиками в 1994 году. С тех пор активно применяется в программировании. Релиз имеет свободную лицензию. На данный момент руководителем проекта является компания Oracle. Распространяется MySQL бесплатно и свободно. Включено соответствующее хранилище в стандартный набор утилит LAMP для разработки сайтов на базе Linux. В Windows и Android тоже применяется достаточно активно.
Представлена популярной СУБД с моделью «клиент-сервер». Обеспечивает доступ к данным для разного рода программ, сервисов и приложений.
Несколько слов об SQLite
SQLite – это система управления реляционными базами данных. Напоминает Oracle, MySQL, PostgreSQL и SQL Server. Отвечает за реализацию большей части стандарта SQL, но не поддерживает клиент-серверную модель. Это значит, что можно осуществить связь базы данных SQLite с приложением, а потом получить доступ ко всем возможностям БД непосредственно в программе.
SQLite предусматривает следующие нюансы:
- совместимость с Android;
- возможность внедрения в iOS;
- каждое приложение сможет создавать и использовать «хранилище данных».
Пример – это хранение в Android контактов и медиафайлов. Они будут ссылаться на БД SQLite. Соответствующий вариант является для Android-разработки самым распространенным. Далее будет рассмотрена работа с этой БД более подробно.
Предварительная подготовка
Для того, чтобы активировать в написанной программе для Андроида привязку данных, требуется добавить в файл build.gradle специальный код. Он выглядит так:
Для использования в виде RecyclerView и CardView для отображения списков, предстоит активировать в этом же документе некоторые библиотеки. Делается это следующим образом:
Использовать любую возможность SQLite в разработке под Android не так уж трудно. Особенно если предварительно хорошенько научиться использовать азы БД при коддинге.
Пример программы
Далее будет рассмотрен небольшой пример приложения, поясняющий принцип работы с базами данных в Андроиде. В нем:
- Android SQLite будет содержать несколько таблиц.
- Первая табличка – это Employer, вторая – Employee.
- Employee – содержит ссылку на внешний ключ первой таблички.
При создании утилиты будет встречаться MainActivity, из которого удастся перейти к EmployeeActivity и EmployeActivity.
Выше – пример того, как именно выглядит софт. Опираясь на него, нужно научиться вести запись данных, а также их чтение. О других «ключевых» принципах работы с БД тоже не следует забывать.
Классы хранения
Классы отвечают за определение того, как будут храниться данные в выбранной базе. В SQ Lite ведется сохранение значения при помощи нескольких classes:
- NULL – нулевой параметр;
- INTEGER – целочисленные, от 1 до 8 байтов;
- REAL – с плавающей запятой;
- TEXT – текстовые строчки, которые используют кодировку БД (URF-8 или UTF-16);
- BLOB – двоичные электронные материалы.
В последнем случае новые сведения будут храниться так, как они были введены пользователем изначально.
Определение таблички
SQLite – это локальная база данных. Для того, чтобы она функционировала на Android исправно, требуется обеспечить возможность создания таблицы. Также утилита должна по мере необходимости осуществлять их сброс.
Для этого нужно:
- Открыть Android SQLite Query для создания Empoyer.
- После – перейти к EmplayerActivity.
- Логику создания базы лучше указывать в классе. Это поможет устранить возможные ошибки и неполадки.
- Используемый класс будет носить название SampleDBContact.
- Сначала нужно определить частный конструктор для класса, после – создать class для представления таблицы Employer.
- Класс Employer отвечает за реализацию интерфейса под названием BaseColumns. За счет оно будет предоставляться доступ к двум столбцам таблички: _ID и _COUNT.
- _Count способен использовать ContentProviders для возврата количества записей, извлекаемых при помощи заданного запроса.
- _Count не является обязательным.
- Строчка Create_Table будет компилироваться в специальный запрос.
public final class SampleDBContract {
private SampleDBContract() {
}
public static class Employer implements BaseColumns {
public static final String TABLE_NAME = "employer";
public static final String COLUMN_NAME = "name";
public static final String COLUMN_DESCRIPTION = "description";
public static final String COLUMN_FOUNDED_DATE = "date";
public static final String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS " +
TABLE_NAME + " (" +
_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_NAME + " TEXT, " +
COLUMN_DESCRIPTION + " TEXT, " +
COLUMN_FOUNDED_DATE + " INTEGER" + ")";
}
}
Выше – то, как будет выглядеть упомянутый класс.
Создание БД через OpenHelper
Для того, чтобы каждая новая версия не доставляла хлопот при работе с БД, требуется создать подкласс SQLiteOpenHelper. Он будет упрощать управление хранилищем данных SQL в Android, создавая оное, если «табличек» нет.
Сначала предстоит определить методы onCreate() и onUpgrade(). Они помогут указывать то или иное действие для создания или обновления баз данных.
Выглядит код так:
public class SampleDBSQLiteHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "sample_database";
public SampleDBSQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLite Db) {
sqLiteDatabase.execSQL(SampleDBContract.Employer.CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + SampleDBContract.Employer.TABLE_NAME);
onCreate(sqLiteDatabase);
}
}
Теперь для базы данных на Android требуется задать имя: sample_database. Конструктор вызочвет конструктор суперкласса с именем и версией БД. В OnCreate предстоит указать объекту SQLiteDatabase выполнение оператора Employer Create_Table SQL. Посредством OnUpgrade осуществляется сбор таблички Employer с ее последующим очередным созданием.
У рассматриваемой таблички есть три столбца: name, description и founded_date. Для сохранения нужно щелкнуть по кнопке, которая вызовет метод saveToDB().
В saveToDB получится ссылка на объект SQLiteDatabase при помощи метода getWritableDatabase из SQLiteOpenHelper. Соответствующий метод создаст БД, если она отсутствует. При наличии таковой происходит открытие оной. GetWritableDatabase осуществляет возврат объекта SQLiteDatabese, который будет открывать доступ на чтение и запись.
Приведенный пример учитывает несколько моментов:
- В ходе обработки Android кода будет получен объект SQLiteDatabase. Он предоставляет доступ на запись в базу данных.
- Значения, хранимые в БД, размещаются в ContentValue. В виде ключа используются имена столбцов.
- Date помещается в объект ContentValue, который будет переводиться в класс хранения Android SQLite INTEGER.
- При вставке в табличку данных строчки через метод database.insert() происходит возврат идентификатора строки.
Все это должен учитывать программер, когда работает с Android и табличками.
Выбор информации
Теперь стоит изучить вызов методов для чтения информации из имеющегося «хранилища». Объект SQLiteDataBase, возвращаемый getReadableDatabase() представляет собой тот же доступ на чтение и запись электронных материалов, возвращаемый через функцию getWritableDatabase(). Исключение – ситуации, когда присутствуют установленные заранее ограничения. Пример – файловая система, в которой есть заполненная БД, установленная со статусом «только для чтения».
Здесь:
- Метод readFromDB осуществляет запрос БД и возвращает все строчки из таблички Employer, в которых имя или описание из оной совпадает со значением, указанным в EditText.
- Projection – это массив String, который выступает в виде столбцов, необходимых для получения.
- Selection – строковое представление условия SQL WHERE. Оно отформатировано так, что вопросительный знак заменяется аргументами в массиве selectionArgs String.
Нужно обратить внимание на объект, которые возвращается через запрос Cursor. Далее будет разобрано, как можно отобразить его содержимое через RecycleView.
Отображение содержимого Cursor
Cursor отвечает за предоставление произвольного доступа к набору результатов, возвращаемому запросом к базе данных. Это значит, что через него можно получить доступ к значениям в любом месте.
Выше – пример того, как выглядит соответствующий процесс.
Внешние ключи
Сейчас в Android программе была создана таблица Employer с заполненными строками. Теперь стоит рассмотреть создание Employee, которая будет связана с предыдущей таблицей через столбец _ID Employer. Для этого нужно определить класс Employee, который будет расширять BaseColumns в классе SampleDBContact.
Выше – то, как это будет выглядеть в коде.
Обновление
Теперь стоит рассмотреть в Android программе обновление:
- Создана таблица Employer с добавленными значениями.
- Использовать для обновления onUpgrade не стоит – это приведет к сбросу.
- Для предотвращения ситуации нужно закомментировать или удалить оператор drop в методе OnUpgrade.
- Добавить оператор exeSQL(), который отвечает за создание таблички Employee.
Так будет выглядеть реализация поставленной задачи при работе в базе данных для Android.
Отображение информации
А вот – отображение интересующих данных:
Здесь предстоит использовать Spinner. Для отображения информации из Cursor предстоит выбрать name из первой таблички, а также id. Далее – создать экземпляр SimpleCursorAdapter, передавая ему Cursor и массив столбцов для отображения и представлений. Через них будет происходить показ adapterRowViews.
Внешние ключи – использование в строках
Чтобы в программу Android вставить строчку с внешним ключом, нужно пользоваться теми же принципами, что и при вставке строк без ограничений. Разница заключается в том, что на выходе получится ссылка на выбранный объект Cursor из Spinner. После – значение столбца _ID Employer.
values.put(SampleDBContract.Employee.COLUMN_EMPLOYER_ID, ((Cursor)binding.employerSpinner.getSelectedItem()).getInt(0));
Выборка и JOIN
Метод SQLiteDatabase query() нельзя применять для запросов к нескольким таблицам. Придется составить собственную «команду»:
В условии с Where используется вопросительный знак. Для того, чтобы не нарушать установленный синтаксис, требуется определить selectArgs String[] со значениями, которые будут заменять в SQL-запросе символ «?».
Именно так происходит работа с SQLite при программировании для Android.