Шаг вперед от SQLite

Вступление:

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

Перед комнатой:

До появления Room и долгое время разработчики Android полагались на SQLite в качестве основной базы данных. SQLite был в основном прост в использовании и имел некоторые явные преимущества - он позволял хранить данные в структурированном виде, работал лучше, чем другие базы данных, и был более легким вариантом по сравнению с другими сторонними базами данных.

Но были и некоторые ограничения. Во-первых, размер базы данных в большинстве случаев был ограничен до 2 ГБ. Кроме того, нам нужно было запоминать запросы (такие как вставка, обновление, удаление), а также нам нужно было написать довольно много кода для установления соединений с базой данных, версий и имен столбцов таблицы.

Но теперь у нас есть база данных Room, которая была запущена на Google IO в 2017 году. Google настоятельно рекомендует использовать Room вместо SQLite.

Что такое комната?

Так что же такое номер? Room - это библиотека отображения объектов для SQLite. Это простой способ создать базу данных, которая также исключает шаблонный код. Библиотека Room обеспечивает уровень абстракции над SQLite, что в основном означает, что она становится расширенной версией SQLite.

По сути, с помощью базы данных Room мы можем быстро создавать базы данных и выполнять такие операции, как (создание, обновление, удаление, чтение), и одним из преимуществ Room является то, что мы не получаем сложные вложенные объекты, такие как с другими сторонними базами данных ORM.

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

Компоненты в номере:

В базе данных Room у нас есть 3 компонента.

  • Сама база данных (содержит владельцев базы данных и сервер в качестве основной точки доступа и ее реляционные данные)
  • Сущность (которая представляет таблицу в вашей базе данных)
  • DAO (то есть объект доступа к данным, который содержит методы, используемые для доступа к базе данных)

Настройка разработки:

Во-первых, нам нужно добавить зависимость для Room в наш build.gradle файл:

Как видно выше, поскольку мы используем Kotlin, нам нужно использовать kapt вместо annotationProcessor. поэтому в случае с Kotlin нам также нужно добавить плагин Kotlin:

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'kotlin-kapt'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.roomdatabase"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

После успешной настройки нам нужно создать наши компоненты.

Во-первых, нам нужно создать класс Database, как показано ниже:

Класс Database должен быть абстрактным, он расширяет RoomDatabase() class. Здесь мы также определяем базу данных с аннотацией @Database, а также определяем как entity, так и version.

Здесь мы также создаем функцию с именем bookDao, которая является абстрактной функцией, поскольку абстрактный класс может иметь только абстрактные функции, он расширяет сущность BookDAO, и всякий раз, когда мы вызываем bookDao() функцию, она будет называться сущностью.

Во-вторых, нам нужно создать класс Entity (который я определил выше) с именем BookDao. По сути, это таблица, в которой нам нужно определить столбец нашей таблицы:

Здесь мы также определяем наш класс с аннотацией @Entity, чтобы мы знали, что это файл сущности. В приведенном выше коде мы определили первичный ключ bookId и столбец bookName с помощью аннотаций.

Третий и последний шаг - создать DAO интерфейсный компонент для доступа к методам:

Иерархия проекта:

Это все, что нужно для нашей установки. Теперь, когда наш файл базы данных готов, нам нужно вызвать его в нашем классе MainActivity.kt, и мы увидим следующие результаты:

var db= Room.databaseBuilder(applicationContext,AppDb::class.java,"BookDB").build()

То, что я здесь сделал - сначала я создал переменную с именем “db” и создал функцию построения базы данных Room, в которой первый параметр - это контекст, второй параметр - это наш класс базы данных, а третий параметр - это имя нашей базы данных (это то, что вы хотите, чтобы вы назвали его во время установки).

Вставить и получить регистр:

Теперь, когда все готово, нам нужно знать, как сохранять книги в нашей базе данных. Для этого мы создаем объект Entity, устанавливаем желаемые значения и вызываем нашу функцию DAO.

Чтобы получить записи, мы просто вызвали метод getAllBooks(), который мы создали внутри нашего BookDAO, чтобы получить все сохраненные книги из базы данных.

Таким образом мы можем отображать прочитанные книги с идентификатором книги и названием книги.

Примечание:

Вся эта функциональность будет на других Thread , так как вы не можете выполнять операции на main-thread, как показано ниже:

Результат:

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

Вы также можете ознакомиться с примером проекта:



Заключение:

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

Надеюсь, эта статья будет вам полезна. Если вы думаете, что чего-то не хватает, у вас есть вопросы или вы хотите оставить отзыв, оставьте комментарий ниже. Буду признателен за отзыв.

Я написал другой контент, связанный с Android, и если вам понравилось то, что вы здесь прочитали, вам, вероятно, понравится и это:



Делиться (знаниями) - это забота 😊 Спасибо, что прочитали эту статью. Не забудьте аплодировать или порекомендовать эту статью, если вы нашли ее полезной. Это очень много значит для меня.

Если вам нужна помощь, присоединяйтесь ко мне в Twitter, LinkedIn, GitHub и подпишитесь на мой Канал Youtube .

Примечание редактора. Heartbeat - это онлайн-публикация и сообщество, созданное авторами и посвященное предоставлению первоклассных образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.

Являясь независимой редакцией, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.

Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить лучшие модели машинного обучения.