Upload
noveo
View
317
Download
8
Embed Size (px)
DESCRIPTION
Android datatbase and ORM basics
Citation preview
Работа с базами данных в
Android
SQLite
• встраиваемая реляционная база данных
• нет отдельного сервера
• высокая скорость
• небольшой расход памяти
• поддержка стандартные возможности реляционных баз данных – синтаксис SQL, транзакции и prepared statements
• открытый исходный код
• вся база данных в одном файле
• кроссплатформенная
http://sqlite.org
Работа с базами данных в Android2
SQLite в Android
• доступно на любом устройстве Android
• не требует установки БД или
администрирования
• вся работа с базой данных должна быть
в отдельном потоке
Работа с базами данных в Android3
SQLite в Android
• Contract class
• SQL Helper
• SQLiteDatabase
• Cursor
• CursorAdapter
• CursorLoader
Работа с базами данных в Android4
Contract class
Хранит константы, определяющие имена для ваших
URI, таблиц, колонок.
Best practice:
• создаем класс, который будет хранить константы для
всей базы данных
• Создаем внутренние классы с константами для
каждой таблицы
• Реализуем интерфейс BaseColumns
Работа с базами данных в Android5
SQLiteOpenHelper
• Абстрактный класс, с помощью которого можно создавать, открывать и обновлять базу данных
• Создаем наследника и переопределяем следующие методы: onCreate() — вызывается при первом создании базы данных onUpgrade() — вызывается при модификации базы данных onOpen() – вызывается при открытии базы данных
• Должен быть singleton
• Поле id в таблице должно именоваться _id
• close() – закрыть с обратной стороны
• getReadableDatabase()/getWritableDataBase создают и/или открывают базу данных. Возвращают объект SQLiteDatabase
Работа с базами данных в Android6
SQLiteDatabase
Работает с базой данных SQLite напрямую, содержит методы:
• insert()
• update()
- Используют ContentValues
• delete()
• query() - делает запрос к таблице и возвращает Cursor
• rawQuery() – исполняет sql запрос и возвращает Cursor
• execSQL() - выполнение одного sql запроса, не select и ничего что может вернуть какие-то данные
Работа с базами данных в Android7
Cursor
Возвращается на запрос к базе данных, и предоставляет доступ к результатам запроса
Содержит методы:
• moveToFirst()
• moveToNext()
• getInt()
• getString()
• getColumnIndex()
Работа с базами данных в Android8
CursorAdapter
• Адаптер, который отображает данные из курсора на
ListView
• Курсор должен включать столбец с названием "_id"
или этот класс не будет работать
Работа с базами данных в Android9
CursorLoader
• Позволяет выполнять запросы в отдельном потоке
• Наследник AsyncTaskLoader’а
• LoaderCallbacks
Работа с базами данных в Android10
Content Provider
• класс для обмена данными между приложениями
• необходимо зарегестрировать в манифесте:
<provider
android:authorities=
"com.noveo.internship.db.exampleContentProvider" android:name=
".database.ExampleContentProvider"
android:exported="false―/>
Работа с базами данных в Android11
Content Provider
Создаем наследника и переопределяем методы:
• onCreate();
• query();
• getType();
• insert();
• delete();
• update();
Работа с базами данных в Android12
Content Provider
uri используемые при работе с данным классом можно
представить в таком виде:
content://<authority>/<path>/<id>
<authority> - уникальное имя ContentProvider-а
<path> - какие данные нужны (имя таблицы)
<id> - id конкретной записи
- пример:
content://com.noveo.db.provider/toys/5
content://com.noveo.db.provider/toys
Работа с базами данных в Android13
UriMatcher
• служит для определения деталей запроса к контент-провайдеру
• отображает URI разных видов на целочисленные константы
• полезен в случаях, когда обслуживаются разные URI для доступа к одному и тому же источнику данных
Пример:
Если URI оканчивается на /toys - это запрос про всеигрушки
Если на toys/[ID] - про конкретную игрушку
Работа с базами данных в Android14
Жизнь одного запроса
1. вызываем getContentResolver().query(Uri, String, String, String, String)
2. вызывается метод query у ContentResolver
3. СontentResolver анализирует Uri и извлекает от туда authority
4. ContentResolver направляет запрос к ContentProvider-у зарегестрированному по этому authority (уникальному)
5. ContentProvider выполняет запрос и возвращает Cursor (или исключение)
Работа с базами данных в Android15
ORM
(object-relational mapping)
• технология, связывающая таблицы в базе данных с
объектами в приложении
• для решения данной задачи в Android можно
использовать ORMLite
Работа с базами данных в Android16
ORMLite
• открытый исходный код
• поддержка SQLite
• простая аннотация
http://ormlite.com/
http://habrahabr.ru/post/143431/
Работа с базами данных в Android17
ORMLite
аннотация классов
• Аннотируем каждый класс, которы отображается в базу данных
• Каждый такой класс должен содержать конструктор без
аргументов
• Для каждого bean класса создается DAO (Класс наследник от
BaseDaoImpl)
• DAO должны быть thread-safe синглтонами
Подробнее про аннотации и аргументы аннотаций:
http://ormlite.com/javadoc/ormlite-core/doc-
files/ormlite_2.html#Local-Annotations
Тема лекции18