Docs 菜单
Docs 主页
/ /
Atlas Device SDKs
/ / /

CRUD — 创建 — Flutter SDK

在此页面上

  • 写事务(write transaction)
  • 写入操作
  • 后台写入
  • 创建对象
  • 创建一个对象
  • 创建多个对象

Atlas Device SDK 使用高效的存储引擎来持久化对象。您可以创建对象、更新数据库中的对象,并最终从数据库中删除对象。由于这些操作会修改数据库的状态,因此我们称之为写入。

SDK 通过事务处理写入。事务是一系列读写操作组成的列表,SDK 将其视为单个不可分割的操作。换句话说,事务是全有或全无的:事务中的所有操作要么全部成功,要么全都不生效。

所有写入都必须在事务中进行。

数据库一次只允许一个打开的事务。SDK 会阻塞其他线程上的其他写入,直到打开的事务完成。因此,在事务内部从数据库读取值时,不存在竞争条件。

当您完成事务后,SDK 要么提交它,要么取消它:

  • 当 SDK 提交事务时,会将所有更改写入磁盘。对于已同步的数据库,SDK 会将更改排入队列以便与 Atlas Device Sync 同步。

  • 当 SDK 取消写事务(write transaction)或事务中的操作导致错误时,所有更改都将被丢弃(或“回滚”)。

打开数据库后,您可以使用 Realm在其中创建对象。 写入() ACID 事务区块。

realm.write((){
// ...write data to realm
});

您还可以返回写事务(write transaction)回调函数的值。

final yoda = realm.write<Person>(() {
return realm.add(Person(ObjectId(), 'Yoda'));
});

警告

将 RealmObjects 写入一个 Realm 文件

您只能将 RealmObjects 写入单个域文件。如果您已经将 RealmObject 写入了一个域文件,那么当您尝试将其写入另一个数据库时,SDK 就会抛出一个 RealmException异常。

您可以使用 Realm.writeAsync() 异步添加、修改或删除对象。

使用 Realm.writeAsync() 执行写入操作时,等待获取写锁(write lock)和提交事务会在后台进行。只有写入本身在主进程中进行。

这可以减少阻塞主进程执行所花费的时间。这在使用 Device Sync 时特别有用,因为不知道同步客户端何时写入以及会写入多长时间。

// Add Leia to the realm using `writeAsync`
Person leia = Person(ObjectId(), "Leia");
realm.writeAsync(() {
realm.add<Person>(leia);
});

本页上的示例使用两种对象类型:PersonTeam

@RealmModel()
class _Person {
@PrimaryKey()
late ObjectId id;
late String name;
late List<String> hobbies;
}
@RealmModel()
class _Team {
@PrimaryKey()
late ObjectId id;
late String name;
late List<_Person> crew;
late RealmValue eventLog;
}

要将对象添加到数据库,请使用 Realm.add() 在写事务块中将 Realm 对象类的实例传递到数据库。

realm.write(() {
realm.add(Person(ObjectId(), 'Lando'));
});

要向数据库添加多个对象,请在写事务(write transaction)块内将多个对象的列表传递给 Realm.addall ()

realm.write(() {
realm.addAll([
Person(ObjectId(), 'Figrin D\'an'),
Person(ObjectId(), 'Greedo'),
Person(ObjectId(), 'Toro')
]);
});

后退

CRUD