Содержание

Базы данных в SQLite | Android Tools

Post Views: 388

План:

  1. Введение
  2. Что такое SQL
  3. Почему SQLite?
  4. Установка SQLite
  5. Клиенты для SQLite с открытым исходным кодом
  6. Интерфейс DB Browser

Введение

В настоящее время многим работникам сферы администрирования требуется умение создавать многочисленные таблицы и управлять их содержимым. Для управления большими объемами информации создаются базы данных. Чтобы выводить из них запросы, требуется использование определённых запросов. Зачастую в качестве языка ввода и вывода данных используется SQL — язык программирования, широко распространённый среди тестировщиков, администраторов и разработчиков баз данных. В этой статье мы ознакомимся с языком SQL и его упрощённой версией SQLite, рассмотрим преимущества и недостатки обоих вариантов, а также клиенты для создания баз данных и применения запросов.

Что такое SQL

SQL (Structured Query Language) или Язык структурированных запросов представляет собой язык программирования, используемый в работе с базами данных. В системе могут выполняться такие действия, как создание баз данных, редактирование и удаление таблиц, а также применение логических, арифметических действий для запросов и их вывод.

Система не зависит от конкретной СУБД и может переноситься в другие системы, такие как DB2, Oracle Database и прочие. Записи на SQL в основном описывают параметры выбранной информации, а также способы её изменения и вывода. В сложных запросах система не нуждается, однако при подробном конструировании запроса скорость выполнения может быть повышена.

К недостаткам СУБД причисляют некоторую сложность работы, низкую гибкость, сильную зависимость запроса от порядка записи столбцов, а также запутанную иерархическую структуру.

Почему SQLite?

SQLite – это встроенная библиотека для упрощения системы управления базами данных SQL, представленная кросплатформенным ядром базы данных. Зачастую созданные файлы используются для передачи информации между несколькими системами, а также для долгосрочного хранения архивов. Исходный код SQLite можно найти в открытом доступе и использовать его для любых своих целей.

Библиотеке не требуются дополнительные настройки и администрирование, что значительно упрощает работу. Поддерживаются базы данных размером 1 терабайт, а также строки размеров 1 гигабайт. При этом объем кода совсем небольшой: около 750 КБ, а без использования дополнительных функций ещё меньше. Скорость обработки запросов достаточно высокая и работает лучше, чем прямой ввод и вывод файловых систем. Кроссплатформенный язык поддерживается системами Android, iOS, Linux, Windows, BSD, Mac, Solaris и VxWorks. Готовая база данных сохраняется в одном файле для любых систем, что отлично подойдёт в качестве формата файлов приложений.

SQLite является активно применяется для ядра базы данных в мобильных телефонах, КПК, MP3-плеерах, телевизионных приставках и других электронных устройствах. SQLite занимает мало места в коде, эффективно использует память, дисковое пространство и пропускную способность диска, обладает высокой надежностью и не требует обслуживания администратором базы данных. Помимо этого SQLite применяют для поддержки веб-сайтов и для тестирования демонстрационных версий приложений.

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

Подробнее ознакомиться с SQLite можно на официальном сайте в разделе документации и общих ссылок.

Установка SQLite

Для установки базы данных SQLite достаточно перейти на официальный сайт, открыть раздел Download и выбрать в Precompiled Binaries ссылку на скачивание набора средств управления базами данных для нужной операционной системы. Затем распакуйте полученный архив и откройте файл SQLite. Так, вы успешно установили язык программирования для работы с базами данных. Программная оболочка представлена окном командной строки. Уже сейчас в ней можно производить необходимые вычисления и запросы, однако в этой статье мы рассмотрим варианты повышения комфортности и простоты использования языка для любого пользователя.

Клиенты для SQLite с открытым исходным кодом

Клиенты, сервисы и менеджеры применяются для упрощённой работы с языком SQLite. Программы позволяют получить доступ к базе данных, визуализировать и отредактировать данные таблиц, а также вывести запросы и создать резервные копии файла. Имеется множество бесплатных вариантов с открытым исходным кодом, среди которых можно выбрать тот, что придётся по душе. В пример хороших клиентов можно привести SQLiteStudio, Beekeeper Studio и Sqlectron, доступные для операционных систем Windows, Linux, MacOS, а также SQLiteFlow для MacOS и iOS и многие другие настольные и веб-клиенты. Рассмотрим ближе одну из подобных программ.

SQLite DB Browser – простой клиент SQLite с открытым исходным кодом для Linux, Windows и MacOS систем. Помогает в работе с базами данных, редактировании таблиц и вводе запросов на ввод или вывод необходимой информации. Программа проста в использовании и не требует глубоких знаний языка SQL. Пользоваться клиентом могут как разработчики, так и интересующиеся пользователи.

Интерфейс DB Browser

Установленный и открытый SQLite Browser представляет собой рабочее окно с несколькими вкладками и функциями. Оформлением и устройством он похож на любую программу для редактирования таблиц, так что начинающим разобраться в клиенте не составит труда.

В верхней части экрана видны разделы Структура БД (Database Structure), Данные (Browse Data), Прагмы (Edit Pragmas) и SQL (Execute SQL). По умолчанию мы находимся в разделе структур баз данных.

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

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

Редактирование Прагмы содержит параметры для настройки отображения и работы всей программы. Вы можете указать промежутки времени для авто сохранения, возвращение строк данных, установить запоминание удалённых данных, режим блокировки, изменить максимальное число страниц в базе данных. С каждым параметром можно подробнее ознакомиться нажатием мыши на вопросительный знак справа. Вы перейдёте на официальный сайт SQLite, где сможете изучить каждую функцию, её актуальность и воздействие на базу данных.

В разделе SQL производится написание кода и вывод требуемых элементов таблиц в заданном порядке. Для всех команд используется язык SQL, на экране находятся командная строка, окно вывода, а также поле с отчётами об ошибках.

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

sql — Android: как лучше сделать базу данных в приложении?

Вопрос задан

Изменён 3 месяца назад

Просмотрен 70 раз

Я только недавно начал изучать Андроид-разработку, поэтому вопросы могут показаться глупыми.

Разрабатываю Android приложение, и настало время для подключения БД. Требуется сделать регистрацию пользователей, и хранить другие множества данных (например, список компаний, который постоянно обновляется).

Всего у меня на уме было 3 варианта:

  1. Использовать SQLite (локальное хранилище) — не подходит (не буду же я хранить данные всех пользователей и компаний локально на устройстве каждого пользователя? получается уже своего рода блокчейн)
  2. Использовать Firebase, т.к. насколько я понял это одно из (лучших?) популярных решений — не подходит, т.к. оплата Firebase недоступна из России без танцев с бубном
  3. Использовать базу данных на удаленном сервере

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

  1. Информации о том, как подключить к приложению БД достаточно мало.
  2. Нужно использовать веб сервисы, т.к. работать с базой прямо из приложения небезопасно (и еще много причин почему)
  3. Нужно писать все запросы вручную на голом SQL?

Подскажите, правильно ли я понимаю всю ситуацию? Может существует более простой путь для использования внешней БД на Android?

В тех же приложениях на Spring разработчику вообще не приходится думать об организации БД (до какого-то времени), т. к. фреймворк берет всю работу на себя.

  • android
  • sql
  • база-данных
5

В большинстве случаев используется классическая трёхзвенная архитектура:

  1. БД. Одна, хранится на вашем сервере, доступ извне закрыт.
  2. Приложение сервер. Запущено на вашем сервере. Может быть один экземпляр или несколько, если нужно обслуживать много подключений. Предоставляет свой API в сеть. Принимает запросы (вызовы методов API) по сети, обрабатывает их внутри себя, обращается к БД, отдаёт клиенту ответ по той же сети.
  3. Приложение клиент. Запущено на устройстве клиента. Обрабатывает пользовательский ввод, вызывает API, принимает ответные данные и выводит их пользователю.

Некоторые данные, которые часто нужны клиенту и редко меняются можно сохранить у пользователя локально (SQLite). В API необходимо предусмотреть метод закачки этих данных клиенту. Желательно также предусмотреть возможность проверки актуальности этих данных и возможность получить только изменения, а не всё.

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Мобильные базы данных: альтернативы SQLite и SQLite для Android и iOS

ОБНОВЛЕНО 2022. На Droidcon Berlin мы заметили много вопросов, связанных с базами данных. Многие люди не знали об альтернативах SQLite и Object-Relational Mappers (ORM). Поэтому мы продолжаем обзор ландшафта мобильных баз данных.

Что такое мобильная база данных?

В то время как Википедия определяет мобильную базу данных как «либо стационарную базу данных, к которой может быть подключено мобильное вычислительное устройство […] по мобильной сети, либо базу данных, которая фактически хранится на мобильном устройстве», мы имеем в виду исключительно базы данных. которые запускаются на самом мобильном устройстве.

Зачем использовать мобильную базу данных?

Существуют некоторые преимущества, связанные с использованием мобильной базы данных:

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

Каковы преимущества и недостатки работы с SQLite?

Самая зарекомендовавшая себя мобильная база данных — можно даже сказать, единственная «зарекомендовавшая себя» — мобильная база данных — это SQLite. Это может быть связано с тем, что SQLite существует с 2000 года и с самого начала был встроен в iOS и Android. SQLite — это реляционная база данных.

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

Преимущества
Недостатки
  • Цепочка инструментов, например. Браузер БД
  • Нет зависимостей, входит в состав Android и iOS
  • Разработчики могут точно определить нужную им схему данных
  • Разработчики имеют полный контроль, например рукописные SQL-запросы
  • SQL — это мощный и признанный язык запросов, и SQLite поддерживает большинство из них
  • Отладочные данные: разработчики могут взять файл базы данных и проанализировать его.
  • Надежная, широко используемая технология, установленная с 2000 года. длительная работа с обслуживанием приложения)
  • 1 МБ BLOB Ограничение на Android
  • Нет проверок времени компиляции (например, SQL-запросы)
  • Производительность SQLite ненадежна
  • SQL — еще один язык, который нужно освоить
  • SQL-запросы могут быть длинными и сложными
  • Тестируемость (как имитировать базу данных?)
  • Особенно, когда задействованы представления базы данных, удобство сопровождения SQLite может пострадать
  • Какие есть альтернативы SQLite?

    Существует множество альтернатив SQLite. Если вам просто неприятно писать много SQL и шаблонного кода, вы можете использовать абстракцию объектов поверх SQLite. Эта абстракция обычно представляет собой ORM (объектно-реляционное сопоставление). Но если вы хотите полностью заменить SQLite, есть также немало альтернативных баз данных: Couchbase Lite, Interbase, LevelDB, Oracle Berkeley DB (ранее мобильная база данных Oracle называлась Oracle Database Lite), Realm, SnappyDB, Sparksee Mobile (графовая база данных). , абсолютно новый на момент написания этой статьи), SQL Anywhere, SQL Server Compact (снят с производства) и UnQLite.

    Чтобы дать вам общее представление, мы составили небольшую сравнительную таблицу:

    9003 1 обеспечивает шифрование 9003 1 McObject LLC
    Edge Database Android / iOS Тип хранимых данных Sync Central Синхронизация P2P Синхронизация в автономном режиме Шифрование на уровне данных Лицензия/бизнес-модель Поддержка Flutter Краткое описание Минимальный размер посадочного места Компания
    Azure SQL Edge Нет Реляционная БД для IoT Нет Нет Нет Собственный Нет Разработан как база данных SQL для периферии Интернета вещей ; однако из-за размера это не пограничная база данных 500 МБ+ Microsoft
    Couchbase Lite Android / iOS Документы JSON / NoSQL db Да Да Нет Шифрование базы данных с помощью SQLCipher (256-битный AES) Apache 2. 0 Неофициальный плагин Flutter для Couchbase Lite Community Edition, доступный Встроенная/портативная база данных с поддержкой P2P и центральной синхронизации (синхронизации) . Безопасный SSL. < 3,5 МБ Couchbase
    ExtremeDB iOS Реляционная БД в памяти, гибридное сохранение Шифрование AES Собственный Встроенная реляционная база данных < 1 МБ
    InterBase ToGo / IBLite Android / iOS Реляционный 256-битное шифрование AES Собственное Встраиваемая база данных SQL. < 1 МБ Embarcadero
    LevelDB Android / iOS Пары «ключ-значение» / база данных NoSQL Нет Нет Нет Нет Новый BSD Неофициальный клиент, очень плохой рейтинг Портативное облегченное хранилище ключей и значений, NoSQL, без поддержки индексов; бенчмарки 2011 года, к сожалению, удалены < 1 МБ LevelDB
    Team
    LiteDB Android / iOS (только с Xamarin) Хранилище документов NoSQL, полностью созданное в . Net Лицензия MIT A .Net встроенный NoSQL база данных < 1 МБ Команда LiteDB
    Mongo Realm (приобретена Mongo в 2019 году) Android / iOS База данных объектов Да, привязана к использованию Серверы MongoDB Нет Нет Да Собственный с Apache 2.0 License APIs Неофициальный плагин Flutter, альфа-версия согласно их веб-сайту [11.03.2022] Встроенная база данных объектов 5 МБ+ MongoDB Inc.
    ObjectBox Android / iOS / Linux / Windows / любой POSIX Объектно-ориентированная пограничная база данных NoSQL для высокой производительности на пограничных устройствах в мобильных устройствах и IoT Да WIP Да транспортное шифрование; дополнительное шифрование по запросу Apache 2.0 и собственный Да Высокопроизводительная база данных NoSQL Edge с готовой синхронизацией данных для мобильных устройств и Интернета вещей; полностью ACID-совместимый; доступные бенчмарки. < 1 МБ ObjectBox
    Oracle Database Lite Android / iOS Реляционная Да Да Нет 128-битное стандартное шифрование AES Собственное Portable с поддержкой P2P и центральной синхронизации, а также поддержкой синхронизации с SQLite < 1 МБ Oracle Корпорация
    redis DB Хранилище K/V в памяти, обычно используемое в качестве кэша. Лицензия BSD из трех пунктов, RSAL и собственность Доступен неофициальный клиент redis Dart Высокопроизводительное хранилище ключевых значений в памяти с дополнительной устойчивостью Пустой экземпляр использует ~ 3 МБ памяти redislabs (первоначальный автор redis ушел в 2020 г.) 1 SQL в любом месте Android / iOS Реляционный Зависимый Нет Нет Шифрование AES-FIPS для полной базы данных или выбранных таблиц Собственное Нет Встроенная/переносная база данных с поддержкой централизованного snyc со стационарной базой данных   Sybase iAnywhere
    SQLite встроенная в iOS и Android 9003 6 Относительный Нет Нет Нет Нет , Используйте SQLCipher для шифрования SQLite Общественное достояние Плагины Flutter (ORM) для SQLite, но ничего из Hwaci Библиотека программирования C; наверное 90% доли рынка (очень личное предположение, 2016 г. ) < 1 МБ Hwaci
    SQL Server Compact Android / iOS Реляционный Нет 90 036 Нет Нет Да Собственный Нет Компактная встроенная/переносимая база данных для мобильных устройств и настольных компьютеров Microsoft Windows, поддержка синхронизации с Microsoft SQL Server 2 МБ Microsoft 91 28-битное или 256-битное стандартное шифрование AES 2-Clause BSD еще нет; хотя может прийти; некоторое время назад была выпущена версия 0.0.1 Portable облегченная встроенная база данных; автономная библиотека C без зависимостей. ~ 1,5 МБ Системы Symisc

    Пометьте эту матрицу на GitHub. Мобильные базы данных, как определено здесь, являются подмножеством баз данных Edge.

    Если вас интересует показатель скорости распространения, ознакомьтесь со следующим рейтингом популярности баз данных: http://db-engines. com/en/ranking

    Также обратите внимание: DB-Engines перечисляет более 300 баз данных по состоянию на 2020 год. ; база баз данных, в которую также входят хобби-проекты, насчитывает более 700 баз данных. В то время как рынок баз данных очень переполнен и действительно динамичен, рынок пограничных баз данных по-прежнему остается очень маленьким и четким рынком, на котором лишь несколько заметных игроков. Вкратце: в сфере пограничных баз данных еще есть место 😉

    Как насчет NoSQL для мобильных устройств?

    NoSQL — довольно большая группа подходов к базам данных, использующих нереляционную структуру данных. Действительно, базы данных NoSQL включают в себя хранилища ключей-значений, базы данных документов, хранилища с широкими столбцами, базы данных объектов и базы данных графов. Как правило, NoSQL ассоциируется с масштабируемостью и производительностью. Однако масштабируемость подходов NoSQL на стороне сервера в значительной степени связана с горизонтальным масштабированием (добавлением дополнительных серверов), что обычно не является преимуществом для мобильной базы данных, работающей на мобильных устройствах.

    Хотя подходы NoSQL обычно обрабатывают некоторые операции быстрее, конкретное соответствие конкретной базы данных NoSQL зависит от варианта использования. Кроме того, скорость подхода NoSQL может быть связана с меньшим вниманием к надежному хранению данных (см. ACID). Итак, если вашему приложению требуется строгая согласованность данных или вы обрабатываете сильно структурированные данные, например, например. адресная книга, реляционная база данных все еще может быть хорошим выбором. Однако если вы хотите обрабатывать неструктурированные данные или нуждаетесь в большей гибкости, подход NoSQL может оказаться для вас более интересным.

    Общие черты подходов NoSQL, которые делают его достойным оценки для мобильных устройств:
    1. Объектно-ориентированный код в приложениях для iOS и Android

      Разработчики реализуют приложения на объектно-ориентированных языках, то есть приложение работает с объектами. Но реляционная база данных работает со столбцами и строками и не позволяет хранить объекты напрямую. Следовательно, объекты необходимо сериализовать или повторно собирать, возможно, неэффективным способом при сохранении или извлечении. Для любой операции с базой данных это требует времени и накладывает естественное ограничение скорости. Правильный подход NoSQL, например. объектная база данных/хранилище, может решать ее без сложных сопоставлений.

    2. Динамические требования к мобильным приложениям

      После выпуска мобильного приложения часто существует непрерывный рабочий процесс для постоянной адаптации и улучшения приложения (исправление ошибок, новые функции, изменения, связанные с изменениями в программном обеспечении или среда). Внедрение изменений в мобильное приложение с реляционной клиентской базой данных требует внесения изменений в схему базы данных, что приводит к дополнительной работе. Базы данных NoSQL обычно работают без схемы (обычно с некоторыми принудительными правилами проверки данных). Добавление новых полей по мере необходимости и совместное хранение разнородных данных по мере необходимости требует минимальных усилий по внедрению базы данных. Однако, опять же, все зависит от конкретной реализации базы данных и варианта использования.

    3. Растущая потребность в обработке больших и/или неструктурированных данных на мобильных устройствах

      Кажется, существует потребность в обработке все большего количества данных (грубо говоря, объем данных удваивается каждые 24 месяца) в целом и на мобильных устройствах. Очевидно, что на мобильных устройствах место для хранения по-прежнему является серьезной проблемой, которая обычно не учитывает простое хранение всех возможных точек данных для потенциального использования. Тем не менее, большинство баз данных NoSQL предпочитают скорость и хранят неструктурированные данные. Таким образом, для мобильных приложений, обрабатывающих большие объемы (неструктурированных) данных, подход NoSQL может быть решением.

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

    В целом, мы надеемся, мы даем хороший общий обзор общего состояния мобильных баз данных.

    Распространяйте любовь

    Опубликовано в Новости с тегами Мобильная база данных, NoSQL, SQLite, альтернативы SQLite.

    Локальные базы данных в Android: выбор лучшего для вашего проекта | Роберт Левонян

    Опубликовано в

    ·

    6 мин чтения

    ·

    4 марта 2021 г.

    Кэширование в Android — интересная задача, и есть несколько способов сделать это. Но вот вопрос — какой способ лучше для меня? В этой статье я хочу попытаться ответить на этот вопрос и помочь вам понять, какая из приведенных библиотек или фреймворков лучше всего подходит для вашего следующего проекта. Я собираюсь сравнить самые популярные механизмы кэширования для Android, которые доступны на рынке на данный момент.

    Давайте посмотрим на реализацию и использование каждого из них, а в конце сравним некоторые цифры!

    Изображение с Dribbble (https://dribbble.com/shots/91
    -Man-in-storage-room) 

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

    • Room
    • Realm
    • SQL Delight
    • ObjectBox

    Давайте сравним реализацию, использование и скорость этих 4.

      ПРИМЕЧАНИЕ! Вы можете найти ссылку на образец проекта в конце этой статьи.  

    Интеграция

    Давайте посмотрим, что нам нужно сделать, чтобы добавить каждый фреймворк в наш проект.

    Room

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

     реализация "androidx.room:room-runtime:$roomVersion" 
    реализация "androidx.room:room-ktx:$roomVersion" // только Kotlin
    kapt "androidx.room:room-compiler:$roomVersion" // обработчик аннотаций

    Realm

    Чтобы использовать realm, необходимо добавить соответствующий плагин.

     //уровень проекта build.gradledependencies  { 
    ...
    classpath "io.realm:realm-gradle-plugin:$realmVersion"
    . ..

    }
    // сборка на уровне приложения. gradleapply плагин: 'com.android.application'
    применить плагин: 'realm-android'

    ObjectBox

    Для ObjectBox необходимо сделать и то, и другое.

     // Уровень проекта Build.gradledePendencies  {
    ...
    ClassPath "IO.Objectbox: ObjectBox-Gradle-Plugin: $ obversion"
    ...

    } //20260. : 'com.android.application'
    применить плагин: 'io.objectbox'... зависимости {
    ...
    реализация "io.objectbox:objectbox-kotlin:$obVersion"
    ...
    }

    SqlDelight

    То же, что и ObjectBox.

     //уровень проекта build.gradledependencies  { 
    ...
    classpath "com.squareup.sqldelight:gradle-plugin:$delightVersion"
    ...

    } // уровень приложения build. gradleapp лай плагин : 'com.android.application'
    применить плагин: 'com.squareup.sqldelight'... зависимости {
    ...
    реализация "com.squareup.sqldelight:android-driver:$delightVersion"
    реализация "com.squareup.sqldelight:coroutines-extensions-jvm:$delightVersion"
    ...
    }

    Реализация

    В этой части давайте обсудим сущности и запросы.

    Room

     @Entity 
    data class Movie(
    @PrimaryKey
    val id: Long,
    val backgroundPath: String,
    val posterPath: String,
    val title: String, 9 0260 val обзор: String,
    @TypeConverters (DateTypeConverter::class)
    val releaseDate: Date,
    )

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

    Вот пример интерфейса объекта доступа к данным.

    Чтобы хранить, получать, обновлять или удалять данные в комнате, вам необходимо создать интерфейс с аннотацией @Dao . Также с помощью аннотаций @Insert, @Update, @Delete можно создавать соответствующие функции без реализации запроса. Чтобы получить данные из вашей БД, вам нужно создать функцию, аннотировать ее аннотацией @Query и передать сам запрос в качестве параметра аннотации.

    Room поддерживает как RxJava, так и Kotlin Coroutines, поэтому вы можете сделать так, чтобы ваши функции возвращали типы RxJava Future или приостанавливали их работу.

      Внимание! Вы можете установить тип возврата функции с помощью запроса SELECT  kotlinx.coroutines.flow  и получать мгновенные обновления каждый раз, когда данные в БД изменяются.  

    Чтобы получить доступ к DAO, вам необходимо создать экземпляр AppDatabase.

    Пример класса базы данных приложения

    Realm

     открытый класс Movie : RealmObject() { 
    @PrimaryKey
    var id: Long = 0L
    var backgroundPath: String = ""
    var posterPath: String = ""
    var title: String = ""
    var обзор: String = ""
    var releaseDate: Date = Date( )
    }

    В Realm класс данных не может быть сущностью, потому что для Realm требуется, чтобы класс сущности имел пустой конструктор. Чтобы сделать класс вашей сущностью Realm, просто унаследуйте его от RealmObject . Как и Room, Realm хранит примитивные типы и строки, но также может хранить общие типы, такие как даты. Если вам нужно сохранить собственный пользовательский объект, он также должен быть получен из RealmObject.

    Чтобы иметь возможность использовать Realm, он должен быть инициирован в классе Application.

     Realm.init(context) 

    Для управления данными в базе данных Realm вам нужен экземпляр Realm.

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

    Любая операция в базе данных Realm выполняется внутри области транзакции Realm. Существует два типа транзакций: синхронные и асинхронные.

    Чтобы начать синхронную транзакцию, просто запустите ее, вызвав realm.beginTransaction() , напишите свой код и не забудьте сохранить изменения, вызвав realm.commitTransaction() . Если вы похожи на меня и думаете, что всегда будете забывать закрыть транзакцию, попробуйте еще один вариант. realm.executeTransaction {…} . Транзакция будет запущена до выполнения лямбды, а после будет автоматически закрыта.

    Но все мы знаем, что пользователям не очень нравится, когда UI зависает, пока мы выполняем тяжелые задачи в Main Thread. По этой причине просто используйте realm.executeTransactionAsync {…} или realm.executeTransactionAwait {…} , если вы используете Coroutines.

    Для сохранения данных в БД нужно создать объект с функцией realm.createObject() , т.к. в Realm нет таблиц SQL, все сохраняется как объекты. И чтобы прочитать сохраненный экземпляр, вы можете создать запрос, вызвав функции запроса для результата realm.where() .

    ObjectBox

     @Entity 
    класс данных Movie(
    @Id(assignable = true)
    var id: Long,
    var backgroundPath: String,
    var posterPath: String,
    var title: String, 902 Обзор 60 переменных: строка ,
    var releaseDate: Date,
    )

    Структура объектов ObjectBox в основном такая же, как и в Room.

    Для работы с данными в вашем проекте должен быть экземпляр BoxStore.

    Пример создания экземпляра Box Store

    Это должно быть инициировано в классе Application.

     ObjectBox.init(context) 

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

    SqlDelight

    С точки зрения использования SqlDelight отличается от других платформ, упомянутых выше.

    Иерархия каталогов

    Чтобы начать работу с SqlDelight, вам нужно будет создать новый каталог в вашем модуле под основным на одном уровне с каталогом java и назовите его sqldelight . После этого добавьте несколько вложенных каталогов в соответствии с java с теми же именами.

    После создания каталогов добавьте новый файл с расширением .sq (можно установить дополнительный плагин для Android Studio, чтобы выделять код в файлах . sq)

    Вот пример моего файла Movies.sq

    Он содержит обычные запросы SQLite. Поскольку это инфраструктура на основе SQLite, такая как Room, вы не можете хранить объекты Date напрямую, поэтому существует API, аналогичный 9.0687 TypeConverter API в комнате под названием ColumnAdapter .

    Пример Column Adapter

    Остальное будет сгенерировано за вас: объект БД, сущности, запросы и т.д.

    Пример хранения и извлечения данных с помощью SqlDelight

    Финальный раунд

    Ну-ну-ну.

    У нас есть представление о том, какую работу нам нужно выполнить для каждого из фреймворков. Но достаточно ли?

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

    Таблица с некоторым ключевым сравнением аспектов

    Здесь следует отметить одну вещь, Room будет работать почти в два раза быстрее (111/55), если не использовать сопрограммы, а использовать стандартную реализацию с потоком, но даже в этом случае SqlDelight будет немного быстрее .