条件更新功能是指只有在满足条件时才对表中的数据进行更改,当不满足条件时更新失败,可用于 PutRow、UpdateRow、DeleteRow 和 BatchWriteRow 中。
判断条件包括行存在性条件和列条件。
// 设置条件为Col0==0.
SingleColumnValueCondition singleColumnValueCondition = new SingleColumnValueCondition("Col0",
SingleColumnValueCondition.CompareOperator.EQUAL, ColumnValue.fromLong(0));
// 如果不存在Col0这一列, 条件检查不通过.
singleColumnValueCondition.setPassIfMissing(false);
// 只判断最新版本
singleColumnValueCondition.setLatestVersionsOnly(true);
// 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());
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。