3. Что такое SQLite?
●
База данных с открытым исходным кодом.
●
Поддерживает SQL, транзакции и процедуры.
11:02
3 из 80
4. Что такое SQLite?
●
База данных с открытым исходным кодом.
●
Поддерживает SQL, транзакции и процедуры.
●
Не требует много ресурсов (примерно 250 кБ памяти).
11:02
4 из 80
5. Что такое SQLite?
●
База данных с открытым исходным кодом.
●
Поддерживает SQL, транзакции и процедуры.
●
Не требует много ресурсов (примерно 250 кБ памяти).
●
Является встраиваемой библитекой.
11:02
5 из 80
6. Что такое SQLite?
●
База данных с открытым исходным кодом.
●
Поддерживает SQL, транзакции и процедуры.
●
Не требует много ресурсов (примерно 250 кБ памяти).
●
Является встраиваемой библитекой.
●
3 основных типа данных: TEXT, INTEGER, REAL.
11:02
6 из 80
7. Что такое SQLite?
●
База данных с открытым исходным кодом.
●
Поддерживает SQL, транзакции и процедуры.
●
Не требует много ресурсов (примерно 250 кБ памяти).
●
Является встраиваемой библитекой.
●
3 основных типа данных: TEXT, INTEGER, REAL.
●
Всё содержимое БД храниться в одном файле.
11:02
7 из 80
8. Особенности SQLite в Android
●
SQLite интегрирован во все Android устройства.
11:02
8 из 80
9. Особенности SQLite в Android
●
SQLite интегрирован во все Android устройства.
●
Не требуется установка или настройка БД.
11:02
9 из 80
10. Особенности SQLite в Android
●
SQLite интегрирован во все Android устройства.
●
Не требуется установка или настройка БД.
●
Необходимо определить только процедуры создания и
обновления БД.
11:02
10 из 80
11. Особенности SQLite в Android
●
SQLite интегрирован во все Android устройства.
●
Не требуется установка или настройка БД.
●
●
Необходимо определить только процедуры создания и
обновления БД.
Выполняется обращение к файлам устройства.
11:02
11 из 80
12. Особенности SQLite в Android
●
SQLite интегрирован во все Android устройства.
●
Не требуется установка или настройка БД.
●
●
●
Необходимо определить только процедуры создания и
обновления БД.
Выполняется обращение к файлам устройства.
Желательно выполнять запросы асинхронно (в отдельном
потоке).
11:02
12 из 80
13. Особенности SQLite в Android
●
SQLite интегрирован во все Android устройства.
●
Не требуется установка или настройка БД.
●
●
●
●
Необходимо определить только процедуры создания и
обновления БД.
Выполняется обращение к файлам устройства.
Желательно выполнять запросы асинхронно (в отдельном
потоке).
Файл БД храниться в каталоге приложения:
DATA/data/ИМЯ_ПРИЛОЖЕНИЯ/databases/ИМЯ_ФАЙЛА
DATA/data/com.bstu.test/databases/test.db
11:02
13 из 80
14. Создание и обновление БД
●
Создать класс-наследник класса SQLiteOpenHelper.
11:02
14 из 80
15. Создание и обновление БД
●
Создать класс-наследник класса SQLiteOpenHelper.
●
Вызвать конструктор родителя с параметрами:
имя_бд и версия_бд.
11:02
15 из 80
16. Создание и обновление БД
●
Создать класс-наследник класса SQLiteOpenHelper.
●
Вызвать конструктор родителя с параметрами:
имя_бд и версия_бд.
●
Переопределить методы onCreate() и onUpgrade().
11:02
16 из 80
17. Создание и обновление БД
●
Создать класс-наследник класса SQLiteOpenHelper.
●
Вызвать конструктор родителя с параметрами:
имя_бд и версия_бд.
●
Переопределить методы onCreate() и onUpgrade().
●
Параметром методов является класс SQLiteDatabase.
11:02
17 из 80
18. Создание и обновление БД
●
Создать класс-наследник класса SQLiteOpenHelper.
●
Вызвать конструктор родителя с параметрами:
имя_бд и версия_бд.
●
Переопределить методы onCreate() и onUpgrade().
●
Параметром методов является класс SQLiteDatabase.
●
getReadableDatabase() и getWritableDatabase()
предоставляют доступ к БД.
11:02
18 из 80
20. Класс SQLiteDatabase
●
●
Базовый класс для работы с БД SQLite.
Предоставляет методы для выполнения запросов к
БД, открытия/обновления/закрытия БД.
11:02
20 из 80
21. Класс SQLiteDatabase
●
●
●
Базовый класс для работы с БД SQLite.
Предоставляет методы для выполнения запросов к
БД, открытия/обновления/закрытия БД.
insert(), update(), delete().
11:02
21 из 80
22. Класс SQLiteDatabase
●
●
Базовый класс для работы с БД SQLite.
Предоставляет методы для выполнения запросов к
БД, открытия/обновления/закрытия БД.
●
insert(), update(), delete().
●
execSQL().
11:02
22 из 80
23. Класс SQLiteDatabase
●
●
Базовый класс для работы с БД SQLite.
Предоставляет методы для выполнения запросов к
БД, открытия/обновления/закрытия БД.
●
insert(), update(), delete().
●
execSQL().
●
Запросы к БД выполняются через
–
rawQuery()
–
query()
–
SQLiteQueryBuilder класс
11:02
23 из 80
24. Примеры запросов к БД
●
rawQuery():
getReadableDatabase().rawQuery("select * from todo
where _id = ?", new String[] { id });
●
query():
database.query(DATABSE_TABLE, new String[]
{ KEY_ROWID, KEY_CATEGORY, KEY_SUMMARY },
null, null, null, null, null);
11:02
24 из 80
25. Параметры метода query()
Параметр
String dbName
String[]
columnNames
String
whereClause
String[]
selectionArgs
String[] groupBy
String[] having
String[] orderBy
11:02
Описание
Название таблицы, для которой
выполняется запрос.
Список столбцов, которые нужно вернуть.
null — все столбцы.
Раздел where sql-запроса, фильтрует
результат. null — все данные.
Знаки «?» в разделе where заменяются
значениями из массива selectionArgs.
Определяет группировку столбцов.
Фильтр групп
Столбцы, по которым данные сортируются
25 из 80
29. Класс ContentValues
●
Определяет пары ключ/значение.
●
Ключ — имя столбца таблицы.
●
Значение — содержимое записи в данном столбце.
●
Используется для добавления/обновления данных в
БД.
11:02
29 из 80
33. Класс Cursor
●
Запрос возвращает объект типа Cursor.
●
Cursor указывает на одну строку результата.
●
getCount().
●
moveToFirst(), moveToNext(), isAfterLast().
11:02
33 из 80
34. Класс Cursor
●
Запрос возвращает объект типа Cursor.
●
Cursor указывает на одну строку результата.
●
getCount().
●
moveToFirst(), moveToNext(), isAfterLast().
●
Типизированные методы get*() для извлечения данных
(getLong(columnIndex), getString(columnIndex)).
11:02
34 из 80
35. Класс Cursor
●
Запрос возвращает объект типа Cursor.
●
Cursor указывает на одну строку результата.
●
getCount().
●
moveToFirst(), moveToNext(), isAfterLast().
●
●
Типизированные методы get*() для извлечения данных
(getLong(columnIndex), getString(columnIndex)).
getColumnIndex(columnName)
11:02
35 из 80
36. Класс Cursor
●
Запрос возвращает объект типа Cursor.
●
Cursor указывает на одну строку результата.
●
getCount().
●
moveToFirst(), moveToNext(), isAfterLast().
●
Типизированные методы get*() для извлечения данных
(getLong(columnIndex), getString(columnIndex)).
●
getColumnIndex(columnName)
●
close()
11:02
36 из 80
39. Что такое ContentProvider?
●
●
Позволяет приложениям получать доступ к
структурированным данным.
Помогает приложениям «делиться» своими данными с
другими приложениями (напр., получить доступ к
списку контактов).
11:02
39 из 80
40. Что такое ContentProvider?
●
●
●
Позволяет приложениям получать доступ к
структурированным данным.
Помогает приложениям «делиться» своими данными с
другими приложениями (напр., получить доступ к
списку контактов).
Должен быть объявлен в файле AndroidManifest.xml
11:02
40 из 80
41. Что такое ContentProvider?
●
●
●
●
Позволяет приложениям получать доступ к
структурированным данным.
Помогает приложениям «делиться» своими данными с
другими приложениями (напр., получить доступ к
списку контактов).
Должен быть объявлен в файле AndroidManifest.xml
Собственный ContentProvider нужен только для
предоставления «своих» данных другим приложениям
11:02
41 из 80
44. Доступ к ContentProvider
●
Доступ к ContentProvider осуществляется по URI.
●
URI передается объекту ContentResolver.
●
URI состоит из имени ContentProvider (authority) и
имени таблицы (path).
11:02
44 из 80
45. Доступ к ContentProvider
●
Доступ к ContentProvider осуществляется по URI.
●
URI передается объекту ContentResolver.
●
URI состоит из имени ContentProvider (authority) и
имени таблицы (path).
content://com.bstu.test/test
11:02
45 из 80
46. Доступ к ContentProvider
●
Доступ к ContentProvider осуществляется по URI.
●
URI передается объекту ContentResolver.
●
URI состоит из имени ContentProvider (authority) и
имени таблицы (path).
content://com.bstu.test/test
●
content:// - схема данных.
11:02
46 из 80
47. Доступ к ContentProvider
●
Доступ к ContentProvider осуществляется по URI.
●
URI передается объекту ContentResolver.
●
URI состоит из имени ContentProvider (authority) и
имени таблицы (path).
content://com.bstu.test/test
●
content:// - схема данных.
// Запрашивает пользовательский словарь и возвращает данные
mCursor = getContentResolver().query(
UserDictionary.Words.CONTENT_URI,// URI данных в таблице слов
mProjection,
// Столбцы, которые нужно вернуть
mSelectionClause
// Критерий отбора (where)
mSelectionArgs,
// Аргументы отбора
mSortOrder);
// Порядок сортировки строк
11:02
47 из 80
60. Класс Loader
●
Позволяет асинхронно загружать данные в activity.
●
Обновляет данные при из изменении.
●
Сохраняет данные при изменении конфигурации.
11:02
60 из 80
61. Класс Loader
●
Позволяет асинхронно загружать данные в activity.
●
Обновляет данные при из изменении.
●
Сохраняет данные при изменении конфигурации.
●
Может кэшировать данные.
11:02
61 из 80
62. Класс Loader
●
Позволяет асинхронно загружать данные в activity.
●
Обновляет данные при из изменении.
●
Сохраняет данные при изменении конфигурации.
●
Может кэшировать данные.
●
Впервые появились в Android 3.0.
11:02
62 из 80
63. Класс Loader
●
Позволяет асинхронно загружать данные в activity.
●
Обновляет данные при из изменении.
●
Сохраняет данные при изменении конфигурации.
●
Может кэшировать данные.
●
Впервые появились в Android 3.0.
●
Совместим вниз до Android 1.6 (Android support library)
11:02
63 из 80
66. Реализация Loader
●
Реализовать класс-наследник от AsyncTaskLoader.
●
LoaderManager управляет объектами типа Loader.
●
Получения Loader:
getLoaderManager().initLoader(0, null, this);
11:02
66 из 80
67. Реализация Loader
●
Реализовать класс-наследник от AsyncTaskLoader.
●
LoaderManager управляет объектами типа Loader.
●
Получения Loader:
getLoaderManager().initLoader(0, null, this);
–
11:02
уникальный ID;
67 из 80
68. Реализация Loader
●
Реализовать класс-наследник от AsyncTaskLoader.
●
LoaderManager управляет объектами типа Loader.
●
Получения Loader:
getLoaderManager().initLoader(0, null, this);
–
уникальный ID;
–
Bundle, для передачи каких-либо данных;
11:02
68 из 80
69. Реализация Loader
●
Реализовать класс-наследник от AsyncTaskLoader.
●
LoaderManager управляет объектами типа Loader.
●
Получения Loader:
getLoaderManager().initLoader(0, null, this);
–
уникальный ID;
–
Bundle, для передачи каких-либо данных;
–
класс реализующий интерфейс
LoaderManager.LoaderCallbacks (обычно activity).
11:02
69 из 80
70. Реализация Loader
●
Реализовать класс-наследник от AsyncTaskLoader.
●
LoaderManager управляет объектами типа Loader.
●
Получения Loader:
getLoaderManager().initLoader(0, null, this);
●
Создание происходит в callback-методе
onCreateLoader().
11:02
70 из 80
71. Реализация Loader
●
Реализовать класс-наследник от AsyncTaskLoader.
●
LoaderManager управляет объектами типа Loader.
●
Получения Loader:
getLoaderManager().initLoader(0, null, this);
●
●
Создание происходит в callback-методе
onCreateLoader().
После завершения загрузки вызывается
onLoadFinished().
11:02
71 из 80
73. SQLite и CursorLoader
●
●
CursorLoader — реализации Loader для БД SQLite.
Выполняет загрузку данных в фоне, не блокируя поток
приложения.
11:02
73 из 80
74. SQLite и CursorLoader
●
●
●
CursorLoader — реализации Loader для БД SQLite.
Выполняет загрузку данных в фоне, не блокируя поток
приложения.
Если Cursor требует обновления, вызывается метод
onLoaderReset().
11:02
74 из 80
75. SQLite и CursorLoader
●
●
●
●
CursorLoader — реализации Loader для БД SQLite.
Выполняет загрузку данных в фоне, не блокируя поток
приложения.
Если Cursor требует обновления, вызывается метод
onLoaderReset().
Переподключает Cursor при изменении конфигурации.
11:02
75 из 80
76. Доступ к SQLite БД через shell
●
БД SQLite храниться в одном файле.
11:02
76 из 80
77. Доступ к SQLite БД через shell
●
БД SQLite храниться в одном файле.
●
Доступен в эмуляторе и устройствах с правами root.
11:02
77 из 80
78. Доступ к SQLite БД через shell
●
БД SQLite храниться в одном файле.
●
Доступен в эмуляторе и устройствах с правами root.
●
adb shell — подключение к устройству
11:02
78 из 80
79. Доступ к SQLite БД через shell
●
БД SQLite храниться в одном файле.
●
Доступен в эмуляторе и устройствах с правами root.
●
adb shell — подключение к устройству
# Переходим в каталог data
cd /data/data
# Наше приложение
cd com.bstu.test
# Заходим в каталог databases
cd databases
# Проверяем содержимое
ls
# Предполагаем, что есть файл БД test.db
# подключаемся к этой БД
sqlite3 test.db
11:02
79 из 80