Шаг вперед от 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 для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить лучшие модели машинного обучения.