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

Что такое Царство? Realm — это объектно-ориентированная база данных с открытым исходным кодом, созданная специально для мобильных устройств. Он обеспечивает простой, быстрый и эффективный способ хранения данных на мобильном устройстве. В отличие от традиционных баз данных SQL, Realm не основана на реляционной модели, что делает ее более простой в использовании и более эффективной для хранения данных на мобильных устройствах.

Начало работы с Realm в Android Чтобы начать работу с Realm в Android, вам нужно добавить библиотеку Realm в свой проект. Это можно сделать, добавив следующую строку в файл build.gradle вашего приложения:

implementation 'io.realm:realm-android:<latest-version>'

Далее вам нужно будет создать экземпляр базы данных Realm. Вы можете сделать это, создав класс, который расширяет класс RealmObject, например:

import io.realm.RealmObject
import io.realm.annotations.PrimaryKey

open class Person(
    @PrimaryKey var id: Int = 0,
    var name: String = "",
    var age: Int = 0
) : RealmObject()

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

Выбирать

Чтобы получить данные из базы данных Realm, вы можете использовать метод where для фильтрации результатов, например:

val realm = Realm.getDefaultInstance()
val results = realm.where(Person::class.java).findAll()

Вставлять

Чтобы вставить данные в базу данных Realm, вы можете создать новый экземпляр RealmObject и использовать метод copyToRealm для его сохранения, например:

val realm = Realm.getDefaultInstance()
realm.beginTransaction()
val person = realm.createObject(Person::class.java, primaryKeyValue)
person.name = "John Doe"
person.age = 30
realm.commitTransaction()

Обновлять

Чтобы обновить данные в базе данных Realm, вы можете использовать метод copyToRealmOrUpdate для сохранения изменений, например:

val realm = Realm.getDefaultInstance()
realm.beginTransaction()
val person = realm.where(Person::class.java).equalTo("id", primaryKeyValue).findFirst()
person?.name = "Jane Doe"
realm.commitTransaction()

Удалить

Чтобы удалить данные из базы данных Realm, вы можете использовать метод delete, например:

val realm = Realm.getDefaultInstance()
realm.beginTransaction()
val person = realm.where(Person::class.java).equalTo("id", primaryKeyValue).findFirst()
person?.deleteFromRealm()
realm.commitTransaction()

связи

Отношения «один к одному». В отношении «один к одному» экземпляр одного объекта RealmObject связан только с одним экземпляром другого объекта RealmObject. Например, рассмотрим объекты Person и Address. Объект Person имеет один объект Address, поэтому вы можете определить эту связь в Realm, добавив поле Address к объекту Person.

import io.realm.RealmObject
import io.realm.annotations.PrimaryKey

open class Person(
    @PrimaryKey var id: Int = 0,
    var name: String = "",
    var age: Int = 0,
    var address: Address? = null
) : RealmObject()

open class Address(
    @PrimaryKey var id: Int = 0,
    var street: String = "",
    var city: String = "",
    var state: String = "",
    var zip: String = ""
) : RealmObject()

Отношения «один ко многим». В отношении «один ко многим» экземпляр одного объекта RealmObject связан с несколькими экземплярами другого объекта RealmObject. Например, рассмотрим объекты Person и Pet. Объект Person может иметь несколько объектов Pet, поэтому вы можете определить эту связь в Realm, добавив RealmList из Pet объектов к объекту Person.

import io.realm.RealmList
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey

open class Person(
    @PrimaryKey var id: Int = 0,
    var name: String = "",
    var age: Int = 0,
    var pets: RealmList<Pet> = RealmList()
) : RealmObject()

open class Pet(
    @PrimaryKey var id: Int = 0,
    var name: String = "",
    var breed: String = ""
) : RealmObject()

Отношения «многие ко многим». В отношениях «многие ко многим» экземпляр одного объекта RealmObject связан с несколькими экземплярами другого объекта RealmObject и наоборот. Например, рассмотрим объекты Person и Event. Объект Person может сопровождать несколько объектов Event, а объект Event может сопровождаться несколькими объектами Person. Чтобы реализовать эту связь, вы должны добавить RealmList из Person объектов к Event объекту и RealmList из Event объектов к Person объекту.

import io.realm.RealmList
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey

open class Person(
    @PrimaryKey var id: Int = 0,
    var name: String = "",
    var age: Int = 0,
    var events: RealmList<Event> = RealmList()
) : RealmObject()

open class Event(
    @PrimaryKey var id: Int = 0,
    var name: String = "",
    var date: String = "",
    var attendees: RealmList<Person> = RealmList()
) : RealmObject()

В заключение, Realm — это мощное и эффективное решение для мобильной базы данных, которое упрощает хранение, извлечение и управление данными в приложениях Android. Интуитивно понятный API Realm, высокая производительность и встроенная поддержка отношений делают его популярным выбором для разработки приложений, управляемых данными. Независимо от того, работаете ли вы с небольшим объемом данных или управляете большими наборами данных, Realm предоставляет инструменты и функции, необходимые для создания и обслуживания высокопроизводительных и масштабируемых приложений. Если вы ищете быстрое и надежное решение для баз данных для своих проектов Android, попробуйте Realm.