Skip to content

Latest commit

 

History

History
214 lines (140 loc) · 7.07 KB

File metadata and controls

214 lines (140 loc) · 7.07 KB

Database ROOM SQLite в Android


ROOM

Room — это библиотека, которая упрощает работу с SQLite в Android. Она предоставляет абстракцию над SQLite и использует аннотации для создания базы данных, таблиц и DAO.

Room — это библиотека, которая:

  • Упрощает работу с SQLite.
  • Предоставляет абстракцию над SQLite.
  • Использует аннотации для создания таблиц, запросов и управления базой данных.
  • Поддерживает LiveData, Flow и Coroutines для асинхронной работы.

Основные компоненты Room

Entity

Entity — это класс, который представляет таблицу в базе данных. Каждое поле класса соответствует столбцу в таблице.

  • @Entity - Указывает, что класс является таблицей.
  • @PrimaryKey - Указывает первичный ключ.
  • @ColumnInfo - Позволяет задать имя столбца.

DAO (Data Access Object / Объект доступа к данным)

DAO — это интерфейс, который предоставляет методы для доступа к данным. Room генерирует реализацию DAO на основе аннотаций.

DAO — это паттерн, который отделяет логику работы с базой данных от остального кода. Он предоставляет методы для доступа к данным.

  • @Insert - Добавляет данные в таблицу.
  • @Query - Позволяет выполнять SQL-запросы.
  • @Update - Обновляет данные в таблице.
  • @Delete - Удаляет данные из таблицы.

RoomDatabase

RoomDatabase — это абстрактный класс, который является точкой входа для работы с базой данных. Он предоставляет DAO и управляет созданием и обновлением базы данных.

  • @Database - Указывает, что класс является базой данных.
  • entities - Список Entity, которые будут использоваться в базе данных.
  • version - Версия базы данных.

Room Аннотации

Аннотации для Entity

  • @Entity - Указывает, что класс является таблицей.
  • @PrimaryKey - Указывает первичный ключ.
  • @ColumnInfo - Позволяет задать имя столбца.
  • @Ignore - Игнорирует поле при создании таблицы.

Аннотации для DAO

  • @Insert - Добавляет данные в таблицу.
  • @Query - Позволяет выполнять SQL-запросы.
  • @Update - Обновляет данные в таблице.
  • @Delete - Удаляет данные из таблицы.

Аннотации для RoomDatabase

  • @Database - Указывает, что класс является базой данных.
  • @TypeConverter - Позволяет добавлять кастомные преобразователи типов.

Room.databaseBuilder

Room.databaseBuilder — это метод, который создает экземпляр базы данных.

val db = Room.databaseBuilder(
    context.applicationContext,
    AppDb::class.java,
    "app_database"
).build()
  • context - Контекст приложения.
  • AppDb::class.java - Класс базы данных.
  • "app_database" - Имя базы данных.

Архитектура Room

Entity

  • Entity — это классы, которые представляют таблицы в базе данных.
  • Каждое поле класса соответствует столбцу в таблице.

DAO

  • DAO — это интерфейсы, которые предоставляют методы для доступа к данным.
  • Room генерирует реализацию DAO на основе аннотаций.

RoomDatabase

  • RoomDatabase — это точка входа для работы с базой данных.
  • Он предоставляет DAO и управляет созданием и обновлением базы данных.

Преимущества Room

  • Упрощение кода: Room автоматически генерирует SQL-запросы.
  • Безопасность: Защита от SQL-инъекций.
  • Поддержка LiveData и Flow: Упрощает работу с асинхронными данными.
  • Проверка на этапе компиляции: Ошибки в SQL-запросах обнаруживаются на этапе компиляции.

SQLite

SQLite — это встраиваемая реляционная база данных, которая хранит данные в виде таблиц. Она:

  • Легковесная и не требует отдельного сервера.
  • Хранит данные в одном файле.
  • Поддерживает стандартный SQL (Structured Query Language).

Основы SQL

Основные команды SQL

  • CREATE TABLE - Создание таблицы.
CREATE TABLE Users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    age INTEGER
);
  • INSERT - Добавление данных.
INSERT INTO Users (name, age) VALUES ('Сергей', 25);
  • SELECT - Выборка данных.
SELECT * FROM Users;
  • UPDATE - Обновление данных.
UPDATE Users SET age = 26 WHERE id = 1;
  • DELETE - Удаление данных.
DELETE FROM Users WHERE id = 1;

Primary Key и Foreign Key

Primary Key (Первичный ключ):

Уникальный идентификатор строки в таблице.

Пример:

CREATE TABLE Users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL
);

Foreign Key (Внешний ключ):

Связывает две таблицы.

Пример:

CREATE TABLE Orders (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    userId INTEGER,
    product TEXT,
    FOREIGN KEY (userId) REFERENCES Users(id)
);

SQLite в Android

SQLiteOpenHelper

SQLiteOpenHelper — это класс, который помогает управлять созданием и обновлением базы данных.