开发者社区> 问答> 正文

Java-SDK (NEW)的单行数据操作

表格存储提供了 PutRow、GetRow、UpdateRow 和 DeleteRow 等单行操作的接口。

插入一行数据(PutRow)


PutRow 接口用于插入一行数据,如果原来该行已经存在,会覆盖原来的一行。
PutRow 写入时支持条件更新(Conditional Update),可以设置原行的存在性条件或者原行中某列的列值条件, 条件更新一章对此有专门介绍。

示例 1


写入 10 列属性列,每列写入 1 个版本,由服务端指定版本号(时间戳)。 private static void putRow(SyncClient client, String pkValue) {
    // 构造主键
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
    PrimaryKey primaryKey = primaryKeyBuilder.build();
    RowPutChange rowPutChange = new RowPutChange(TABLE_NAME, primaryKey);
    //加入一些属性列
    for (int i = 0; i < 10; i++) {
        rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(i)));
    }
    client.putRow(new PutRowRequest(rowPutChange));
}



示例 2


写入 10 列属性列,每列写入 3 个版本,由客户端指定版本号(时间戳)。 private static void putRow(SyncClient client, String pkValue) {
    // 构造主键
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
    PrimaryKey primaryKey = primaryKeyBuilder.build();
    RowPutChange rowPutChange = new RowPutChange(TABLE_NAME, primaryKey);
    //加入一些属性列
    long ts = System.currentTimeMillis();
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 3; j++) {
            rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(j), ts + j));
        }
    }
    client.putRow(new PutRowRequest(rowPutChange));
}



示例 3


期望原行不存在时写入。 private static void putRow(SyncClient client, String pkValue) {
    // 构造主键
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
    PrimaryKey primaryKey = primaryKeyBuilder.build();
    RowPutChange rowPutChange = new RowPutChange(TABLE_NAME, primaryKey);
    // 期望原行不存在
    rowPutChange.setCondition(new Condition(RowExistenceExpectation.EXPECT_NOT_EXIST));
    //加入一些属性列
    long ts = System.currentTimeMillis();
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 3; j++) {
            rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(j), ts + j));
        }
    }
    client.putRow(new PutRowRequest(rowPutChange));
}



示例 4


期望原行存在,且 Col0 的值大于 100 时写入。 private static void putRow(SyncClient client, String pkValue) {
    // 构造主键
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
    PrimaryKey primaryKey = primaryKeyBuilder.build();
    RowPutChange rowPutChange = new RowPutChange(TABLE_NAME, primaryKey);
    // 期望原行存在, 且Col0的值大于100时写入
    Condition condition = new Condition(RowExistenceExpectation.EXPECT_EXIST);
    condition.setColumnCondition(new SingleColumnValueCondition("Col0",
            SingleColumnValueCondition.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100)));
    rowPutChange.setCondition(condition);
    //加入一些属性列
    long ts = System.currentTimeMillis();
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 3; j++) {
            rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(j), ts + j));
        }
    }
    client.putRow(new PutRowRequest(rowPutChange));
}



读取一行数据(GetRow)


单行读 GetRow 接口用于读取一行数据,有以下参数:


  • PrimaryKey:必须设置,为要读取的行的主键。

  • ColumnsToGet:要读取的列的集合,若不设置,则读取所有列。

  • MaxVersions:最多读取多少个版本。MaxVersions 与 TimeRange 必须至少设置一个。

  • TimeRange: 要读取的版本号的范围。MaxVersions 与 TimeRange 必须至少设置一个。

  • Filter:过滤器。过滤器在服务端对读取的结果再进行一次过滤。


示例 1


读取一行,设置读取最新版本,设置 ColumnsToGet。 private static void getRow(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();
            System.out.println("读取完毕, 结果为: ");
            System.out.println(row);
            // 设置读取某些列
            criteria.addColumnsToGet("Col0");
            getRowResponse = client.getRow(new GetRowRequest(criteria));
            row = getRowResponse.getRow();
            System.out.println("读取完毕, 结果为: ");
            System.out.println(row);
        }



示例 2


设置过滤器。 private static void getRow(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);
            // 设置过滤器, 当Col0的值为0时返回该行.
            SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("Col0",
                    SingleColumnValueFilter.CompareOperator.EQUAL, ColumnValue.fromLong(0));
            // 如果不存在Col0这一列, 也不返回.
            singleColumnValueFilter.setPassIfMissing(false);
            criteria.setFilter(singleColumnValueFilter);
            GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria));
            Row row = getRowResponse.getRow();
            System.out.println("读取完毕, 结果为: ");
            System.out.println(row);
        }



更新一行数据(UpdateRow)


UpdateRow 接口用于更新一行数据,如果原行不存在,会新写入一行。
更新操作包括写入某列、删除某列和删除某列的某一版本。
UpdateRow 接口支持条件更新(Conditional Update),可以设置原行的存在性条件或者原行中某列的列值条件, 条件更新一章对此有专门介绍。

示例 1


更新一些列,删除某列的某一版本,删除某列。 private static void updateRow(SyncClient client, String pkValue) {
            // 构造主键
            PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
            primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
            PrimaryKey primaryKey = primaryKeyBuilder.build();
            RowUpdateChange rowUpdateChange = new RowUpdateChange(TABLE_NAME, primaryKey);
            // 更新一些列
            for (int i = 0; i < 10; i++) {
                rowUpdateChange.put(new Column("Col" + i, ColumnValue.fromLong(i)));
            }
            // 删除某列的某一版本
            rowUpdateChange.deleteColumn("Col10", 1465373223000L);
            // 删除某一列
            rowUpdateChange.deleteColumns("Col11");
            client.updateRow(new UpdateRowRequest(rowUpdateChange));
        }



示例 2


设置更新的条件。 private static void updateRow(SyncClient client, String pkValue) {
            // 构造主键
            PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
            primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
            PrimaryKey primaryKey = primaryKeyBuilder.build();
            RowUpdateChange rowUpdateChange = new RowUpdateChange(TABLE_NAME, primaryKey);
            // 期望原行存在, 且Col0的值大于100时更新
            Condition condition = new Condition(RowExistenceExpectation.EXPECT_EXIST);
            condition.setColumnCondition(new SingleColumnValueCondition("Col0",
                    SingleColumnValueCondition.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100)));
            rowUpdateChange.setCondition(condition);
            // 更新一些列
            for (int i = 0; i < 10; i++) {
                rowUpdateChange.put(new Column("Col" + i, ColumnValue.fromLong(i)));
            }
            // 删除某列的某一版本
            rowUpdateChange.deleteColumn("Col10", 1465373223000L);
            // 删除某一列
            rowUpdateChange.deleteColumns("Col11");
            client.updateRow(new UpdateRowRequest(rowUpdateChange));
        }



删除一行数据(DeleteRow)


DeleteRow 接口用于删除一行。
DeleteRow 接口支持条件更新(Conditional Update),可以设置原行的存在性条件或者原行中某列的列值条件, 条件更新一章对此有专门介绍。

示例 1


删除一行。 private static void deleteRow(SyncClient client, String pkValue) {
            // 构造主键
            PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
            primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
            PrimaryKey primaryKey = primaryKeyBuilder.build();
            RowDeleteChange rowDeleteChange = new RowDeleteChange(TABLE_NAME, primaryKey);
            client.deleteRow(new DeleteRowRequest(rowDeleteChange));
        }



示例 2


设置删除条件。 private static void deleteRow(SyncClient client, String pkValue) {
            // 构造主键
            PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
            primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
            PrimaryKey primaryKey = primaryKeyBuilder.build();
            RowDeleteChange rowDeleteChange = new RowDeleteChange(TABLE_NAME, primaryKey);
            // 期望原行存在, 且Col0的值大于100时删除
            Condition condition = new Condition(RowExistenceExpectation.EXPECT_EXIST);
            condition.setColumnCondition(new SingleColumnValueCondition("Col0",
                    SingleColumnValueCondition.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100)));
            rowDeleteChange.setCondition(condition);
            client.deleteRow(new DeleteRowRequest(rowDeleteChange));
        }

展开
收起
云栖大讲堂 2017-10-25 16:04:39 2133 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载