427
微信
条件更新__Java-SDK (NEW)_SDK 参考_表格存储-阿里云
条件更新功能是指只有在满足条件时才对表中的数据进行更改,当不满足条件时更新失败,可用于 PutRow、UpdateRow、DeleteRow 和 BatchWriteRow 中。
判断条件包括行存在性条件和列条件。
行存在性条件:分为 IGNORE、 EXPECT_EXIST 和 EXPECT_NOT_EXIST,分别代表忽略、期望存在和期望不存在。在对表进行更改操作时,会首先检查行存在性条件。若不满足,则更改失败,对用户抛错。
列条件:目前支持两种,SingleColumnValueCondition 和 CompositeColumnValueCondition。是基于某一列或者某些列的列值进行条件判断,与过滤器 Filter 中的条件非常类似。
基于条件更新可以实现乐观锁的功能,即在更新某行时,先获取某列的值。假设为列 A,值为 1,然后设置条件“列 A=1”,更新该行同时使“列 A=2”。若更新失败,代表有其他客户端已经成功更新了该行。
示例 1
构造 SingleColumnValueCondition。
// 设置条件为Col0==0.
SingleColumnValueCondition singleColumnValueCondition = new SingleColumnValueCondition("Col0",
SingleColumnValueCondition.CompareOperator.EQUAL, ColumnValue.fromLong(0));
// 如果不存在Col0这一列, 条件检查不通过.
singleColumnValueCondition.setPassIfMissing(false);
// 只判断最新版本
singleColumnValueCondition.setLatestVersionsOnly(true);
示例 2
构造 CompositeColumnValueCondition。
// composite1 条件为 (Col0 == 0) AND (Col1 > 100)
CompositeColumnValueCondition composite1 = new CompositeColumnValueCondition(CompositeColumnValueCondition.LogicOperator.AND);
SingleColumnValueCondition single1 = new SingleColumnValueCondition("Col0",
SingleColumnValueCondition.CompareOperator.EQUAL, ColumnValue.fromLong(0));
SingleColumnValueCondition single2 = new SingleColumnValueCondition("Col1",
SingleColumnValueCondition.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100));
composite1.addCondition(single1);
composite1.addCondition(single2);
// composite2 条件为 ( (Col0 == 0) AND (Col1 > 100) ) OR (Col2 <= 10)
CompositeColumnValueCondition composite2 = new CompositeColumnValueCondition(CompositeColumnValueCondition.LogicOperator.OR);
SingleColumnValueCondition single3 = new SingleColumnValueCondition("Col2",
SingleColumnValueCondition.CompareOperator.LESS_EQUAL, ColumnValue.fromLong(10));
composite2.addCondition(composite1);
composite2.addCondition(single3);
### 示例 3
通过 Condition 实现乐观锁机制, 递增一列。
```java
private static void updateRowWithCondition(SyncClient client, String pkValue) {
// 构造主键
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
PrimaryKey primaryKey = primaryKeyBuilder.build();
// 读一行
SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey);
criteria.setMaxVersions(1);
GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria));
Row row = getRowResponse.getRow();
long col0Value = row.getLatestColumn("Col0").getValue().asLong();
// 条件更新Col0这一列, 使列值+1
RowUpdateChange rowUpdateChange = new RowUpdateChange(TABLE_NAME, primaryKey);
Condition condition = new Condition(RowExistenceExpectation.EXPECT_EXIST);
ColumnCondition columnCondition = new SingleColumnValueCondition("Col0", SingleColumnValueCondition.CompareOperator.EQUAL, ColumnValue.fromLong(col0Value));
condition.setColumnCondition(columnCondition);
rowUpdateChange.setCondition(condition);
rowUpdateChange.put(new Column("Col0", ColumnValue.fromLong(col0Value + 1)));
try {
client.updateRow(new UpdateRowRequest(rowUpdateChange));
} catch (TableStoreException ex) {
System.out.println(ex.toString());
}
}
最后更新:2016-11-23 16:04:16
上一篇:
多行数据操作__Java-SDK_SDK 参考_表格存储-阿里云
下一篇:
过滤器(Filter)__Java-SDK (NEW)_SDK 参考_表格存储-阿里云
阿里云网站服务条款(Aliyun Website Service Agreement)__账号注册_会员帐号及密码_会员账号&实名认证-阿里云
网络类型说明与使用场景__常见问题_专有网络 VPC-阿里云
查询可用地域列表__地域相关接口_API 参考_云服务器 ECS-阿里云
添加已有云服务器__集群管理_用户指南_容器服务-阿里云
服务条款__产品简介_消息服务-阿里云
BandwidthPackagePublicIpMonitorDataSetType__数据类型_API参考_专有网络 VPC-阿里云
接入后HTTPS异常(SNI问题)__排错手册_Web 应用防火墙-阿里云
云服务器 ECS 肉鸡类问题排查思路
504错误___排错手册_Web 应用防火墙-阿里云
云服务器 ECS 安全组 应用案例
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云