写入数据
开发者可以通过upsert()将一个或者一组对象写入到当前存储区中。在写入对象时,如果在存储区已经存在主键相同的对象,则更新已有的对象;如果不存在,则写入一个新的对象。写入的数据可以来自于新建对象,或者从存储区查询出来的对象。
- 写入一组对象时,数据的写入操作是原子性的,即对象列表中的对象要么全部成功写入,要么全部失败。
- 写入一组对象时,该组中的对象必须属于同一个对象类型,否则会导致写入失败。
- 写入一组对象时,数据总大小不能超过2MB,否则会导致写入失败。
- 写入一组对象时,数据总条数不能超过1000条,否则会导致写入失败。
- 调用写入数据方法,有两种返回方式,返回一个Promise对象或者在参数中传入一个callback对象返回,下面以Promise为例详细说明。
约束与限制
支持Phone、Tablet设备。并且从5.1.0(18)版本开始,新增支持Wearable设备;从5.1.1(19)版本开始,新增支持TV设备;从6.1.0(23)版本开始,新增支持PC/2in1设备。
前提条件
已初始化数据库访问。
写入数据
Promise对象中封装了写入操作执行的结果,通过该Promise对象可以异步侦听执行结果:如果执行成功,可以获取写入的对象数量;如果执行失败,可以获取错误信息。
代码示例:
将BookInfo对象写入至存储区中,写入成功后,返回写入的数量;写入失败,抛出异常。
// 更新“西游记”的借阅者信息
async upsert() {
try {
let book = await this.queryBook('西游记'); // 查询出“西游记”的书籍信息
book.borrowerId = 1;
book.borrowerName = '小明';
book.borrowerTime = new Date();
let record = await databaseZone.upsert(book);
hilog.info(0x0000, 'testTag', `Succeeded in upserting a book, result: ${JSON.stringify(record)}`);
} catch (err) {
hilog.error(0x0000, 'testTag', `Failed to upsert a book, code: ${err.code}, message: ${err.message}`);
}
}