0Pricing
Android Academy · Урок

Класс базы данных Room

Создавайте базу данных и обращайтесь к ней

«Класс базы данных Room» — бесплатный урок Android Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Android Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Android Academy содержит 4 уроков всего.

Объединяем всё вместе

Класс базы данных — основная точка доступа. Он перечисляет сущности, объявляет версию и предоставляет DAO.

Аннотация @Database

Создайте абстрактный класс, расширяющий RoomDatabase, и пометьте его аннотацией @Database.

import androidx.room.Database
import androidx.room.RoomDatabase

@Database(
    entities = [User::class],
    version = 1
)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

Перечисление сущностей и версии

Массив entities сообщает Room, какие таблицы нужно создать. Номер version отслеживает изменения схемы для миграций.

Предоставление DAO

Для каждого DAO объявите абстрактную функцию, возвращающую тип этого DAO. Room реализует её самостоятельно.

abstract fun userDao(): UserDao
abstract fun noteDao(): NoteDao

Создание базы данных

Используйте Room.databaseBuilder, чтобы создать экземпляр. Ему нужны контекст приложения, класс и имя базы данных.

val db = Room.databaseBuilder(
    context.applicationContext,
    AppDatabase::class.java,
    "app.db"
).build()

Превращение в Singleton

Создание базы данных требует ресурсов, поэтому создайте один экземпляр для всего приложения. Часто используется шаблон с сопутствующим объектом и синхронизированным геттером.

companion object {
    @Volatile private var INSTANCE: AppDatabase? = null
    fun get(context: Context): AppDatabase =
        INSTANCE ?: synchronized(this) {
            INSTANCE ?: build(context).also { INSTANCE = it }
        }
}

Почему важен Singleton

Несколько экземпляров базы данных открыли бы несколько соединений с одним и тем же файлом, что привело бы к несогласованности и лишнему расходу памяти. Один общий экземпляр обеспечивает единый источник истины.

Предоставление через Hilt

В реальных приложениях базу данных обычно предоставляют через внедрение зависимостей (это рассматривается в курсе по Hilt), а не с помощью ручного Singleton.

@Provides
@Singleton
fun provideDb(@ApplicationContext ctx: Context) =
    Room.databaseBuilder(ctx, AppDatabase::class.java, "app.db")
        .build()

Изменения схемы и миграции

При изменении сущности увеличьте version и предоставьте миграцию, описывающую SQL для преобразования старых данных.

val MIGRATION_1_2 = object : Migration(1, 2) {
    override fun migrate(db: SupportSQLiteDatabase) {
        db.execSQL("ALTER TABLE users ADD COLUMN age INTEGER NOT NULL DEFAULT 0")
    }
}

Разрушающая миграция

На раннем этапе разработки можно использовать fallbackToDestructiveMigration(), которая удаляет и создаёт заново таблицы вместо миграции. Никогда не используйте её в рабочем приложении с реальными данными пользователей.

Доступ к DAO

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

val dao = db.userDao()
viewModelScope.launch {
    dao.insert(User(1, "Ada", "ada@x.com"))
}

Быстрая проверка

Проверьте, насколько хорошо Вы поняли класс базы данных.

Повторение

Вы узнали:

  • @Database перечисляет сущности, задаёт версию и предоставляет DAO.
  • Создавайте базу с помощью Room.databaseBuilder как Singleton.
  • Для изменений схемы нужны увеличенная версия и миграция.

Часто задаваемые вопросы

Урок «Класс базы данных Room» бесплатный?

Да — полный текст урока «Класс базы данных Room» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Android Academy, подпишись на CoddyKit PRO. Курс Android Academy содержит 4 уроков всего.

Чему я научусь в уроке «Класс базы данных Room»?

Создавайте базу данных и обращайтесь к ней Ты практикуешь Android Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Android Academy?

Предыдущий опыт не требуется. Android Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Класс базы данных Room»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Android Academy?

Да. Каждый урок Android Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Сущности и DAO
  2. Класс базы данных Room
  3. Запросы и связи
  4. Наблюдение за данными с Flow
← Назад к Android Academy