Read & Write Data - Kotlin SDK
On this page
Realm Database uses a highly efficient storage engine to persist objects. You can:
and eventually delete objects from a realm.
Write Transactions
Because the create, update, and delete operations modify the state of the realm, we call them writes.
Realm handles writes in terms of transactions. A transaction is a list of read and write operations that Realm treats as a single indivisible operation. In other words, a transaction is all or nothing: either all of the operations in the transaction succeed or none of the operations in the transaction take effect.
Note
All writes must happen in a transaction.
A realm allows only one open write transaction at a time. Realm blocks other writes on other threads until the open transaction is complete. Consequently, there is no race condition when reading values from the realm within a transaction.
When you are done with your transaction, Realm either commits it or cancels it:
When Realm commits a transaction, Realm writes all changes to disk. For synced realms, the SDK queues the change for synchronization with the backend.
When Realm cancels a write transaction or an operation in the transaction causes an error, all changes are discarded (or "rolled back").
Run a Transaction
Realm represents each transaction as a callback function
that contains zero or more read and write operations. To run
a transaction, define a transaction callback and pass it to
the realm's write
method. Within this callback, you are
free to create, read, update, and delete on the realm. If
the code in the callback throws an exception when Realm runs
it, Realm cancels the transaction. Otherwise, Realm commits
the transaction immediately after the callback.
Example
The following code shows how to run a transaction with write() or writeBlocking(). If the code in the callback throws an exception, Realm cancels the transaction. Otherwise, Realm commits the transaction.
realm.write { // create a frog object in the realm val frog = this.copyToRealm(Frog().apply { name = "Kermit" age = 45 species = "Green" owner = "Jim" }) // update the frog frog.age = frog.age + 1 // get all frogs that belong to Jim val jimsFrogs = this.query<Frog>("owner == 'Jim'").find() // give all of Jim's frogs to Brian jimsFrogs.forEach { it.owner = "Brian" } }