18
Работа с базами данных в Android

Android - 13 - Database

  • Upload
    noveo

  • View
    317

  • Download
    8

Embed Size (px)

DESCRIPTION

Android datatbase and ORM basics

Citation preview

Page 1: Android - 13 - Database

Работа с базами данных в

Android

Page 2: Android - 13 - Database

SQLite

• встраиваемая реляционная база данных

• нет отдельного сервера

• высокая скорость

• небольшой расход памяти

• поддержка стандартные возможности реляционных баз данных – синтаксис SQL, транзакции и prepared statements

• открытый исходный код

• вся база данных в одном файле

• кроссплатформенная

http://sqlite.org

Работа с базами данных в Android2

Page 3: Android - 13 - Database

SQLite в Android

• доступно на любом устройстве Android

• не требует установки БД или

администрирования

• вся работа с базой данных должна быть

в отдельном потоке

Работа с базами данных в Android3

Page 4: Android - 13 - Database

SQLite в Android

• Contract class

• SQL Helper

• SQLiteDatabase

• Cursor

• CursorAdapter

• CursorLoader

Работа с базами данных в Android4

Page 5: Android - 13 - Database

Contract class

Хранит константы, определяющие имена для ваших

URI, таблиц, колонок.

Best practice:

• создаем класс, который будет хранить константы для

всей базы данных

• Создаем внутренние классы с константами для

каждой таблицы

• Реализуем интерфейс BaseColumns

Работа с базами данных в Android5

Page 6: Android - 13 - Database

SQLiteOpenHelper

• Абстрактный класс, с помощью которого можно создавать, открывать и обновлять базу данных

• Создаем наследника и переопределяем следующие методы: onCreate() — вызывается при первом создании базы данных onUpgrade() — вызывается при модификации базы данных onOpen() – вызывается при открытии базы данных

• Должен быть singleton

• Поле id в таблице должно именоваться _id

• close() – закрыть с обратной стороны

• getReadableDatabase()/getWritableDataBase создают и/или открывают базу данных. Возвращают объект SQLiteDatabase

Работа с базами данных в Android6

Page 7: Android - 13 - Database

SQLiteDatabase

Работает с базой данных SQLite напрямую, содержит методы:

• insert()

• update()

- Используют ContentValues

• delete()

• query() - делает запрос к таблице и возвращает Cursor

• rawQuery() – исполняет sql запрос и возвращает Cursor

• execSQL() - выполнение одного sql запроса, не select и ничего что может вернуть какие-то данные

Работа с базами данных в Android7

Page 8: Android - 13 - Database

Cursor

Возвращается на запрос к базе данных, и предоставляет доступ к результатам запроса

Содержит методы:

• moveToFirst()

• moveToNext()

• getInt()

• getString()

• getColumnIndex()

Работа с базами данных в Android8

Page 9: Android - 13 - Database

CursorAdapter

• Адаптер, который отображает данные из курсора на

ListView

• Курсор должен включать столбец с названием "_id"

или этот класс не будет работать

Работа с базами данных в Android9

Page 10: Android - 13 - Database

CursorLoader

• Позволяет выполнять запросы в отдельном потоке

• Наследник AsyncTaskLoader’а

• LoaderCallbacks

Работа с базами данных в Android10

Page 11: Android - 13 - Database

Content Provider

• класс для обмена данными между приложениями

• необходимо зарегестрировать в манифесте:

<provider

android:authorities=

"com.noveo.internship.db.exampleContentProvider" android:name=

".database.ExampleContentProvider"

android:exported="false―/>

Работа с базами данных в Android11

Page 12: Android - 13 - Database

Content Provider

Создаем наследника и переопределяем методы:

• onCreate();

• query();

• getType();

• insert();

• delete();

• update();

Работа с базами данных в Android12

Page 13: Android - 13 - Database

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

Page 14: Android - 13 - Database

UriMatcher

• служит для определения деталей запроса к контент-провайдеру

• отображает URI разных видов на целочисленные константы

• полезен в случаях, когда обслуживаются разные URI для доступа к одному и тому же источнику данных

Пример:

Если URI оканчивается на /toys - это запрос про всеигрушки

Если на toys/[ID] - про конкретную игрушку

Работа с базами данных в Android14

Page 15: Android - 13 - Database

Жизнь одного запроса

1. вызываем getContentResolver().query(Uri, String, String, String, String)

2. вызывается метод query у ContentResolver

3. СontentResolver анализирует Uri и извлекает от туда authority

4. ContentResolver направляет запрос к ContentProvider-у зарегестрированному по этому authority (уникальному)

5. ContentProvider выполняет запрос и возвращает Cursor (или исключение)

Работа с базами данных в Android15

Page 16: Android - 13 - Database

ORM

(object-relational mapping)

• технология, связывающая таблицы в базе данных с

объектами в приложении

• для решения данной задачи в Android можно

использовать ORMLite

Работа с базами данных в Android16

Page 17: Android - 13 - Database

ORMLite

• открытый исходный код

• поддержка SQLite

• простая аннотация

http://ormlite.com/

http://habrahabr.ru/post/143431/

Работа с базами данных в Android17

Page 18: Android - 13 - Database

ORMLite

аннотация классов

• Аннотируем каждый класс, которы отображается в базу данных

• Каждый такой класс должен содержать конструктор без

аргументов

• Для каждого bean класса создается DAO (Класс наследник от

BaseDaoImpl)

• DAO должны быть thread-safe синглтонами

Подробнее про аннотации и аргументы аннотаций:

http://ormlite.com/javadoc/ormlite-core/doc-

files/ormlite_2.html#Local-Annotations

Тема лекции18