写入单行数据

更新时间:
复制 MD 格式

Java SDK 写入单行数据的标准方式。支持条件写入、自定义数据版本号和原子计数器,适用于订单写入、状态更新和计数器等单行业务场景。

前提条件

安装 Tablestore Java SDK并初始化客户端。

功能说明

public PutRowResponse putRow(PutRowRequest putRowRequest) throws TableStoreException, ClientException

写入或更新单行数据。若行已存在,根据 condition 决定覆盖、追加或拒绝。

以下示例向数据表 put_row_demo 写入主键值为 row1 的一行数据,属性列 col1 取值 val1

String tableName = "put_row_demo";

PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
PrimaryKey primaryKey = primaryKeyBuilder.build();

RowPutChange rowPutChange = new RowPutChange(tableName, primaryKey);
rowPutChange.addColumn("col1", ColumnValue.fromString("val1"));

PutRowResponse response = client.putRow(new PutRowRequest(rowPutChange));
System.out.println("RequestId: " + response.getRequestId());
System.out.println("Write CU: " + response.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit());

关键参数

  • tableName(必选):写入的数据表名称。

  • primaryKey(必选):主键信息,主键列名和值必须与数据表的主键结构一致。

  • columnsToPut(可选):属性列列表,通过 addColumn 添加。

参数说明

PutRowRequest 通过 RowPutChange 携带写入参数,各参数说明如下。

名称

类型

说明

tableName(必选)

String

写入的数据表名称。

primaryKey(必选)

PrimaryKey

主键信息,包括主键列名称和主键值。

  • 主键列数据类型包括 STRING、INTEGER 和 BINARY。

  • 主键个数和类型必须与数据表的主键结构保持一致。

  • 主键列为自增列时,需将该列的值设置为占位符,详见自增主键列

columnsToPut(可选)

List<Column>

属性列列表,可通过多次调用 addColumn 逐列添加,或一次性传入 List<Column> 构造。

  • 数据类型支持 STRING、INTEGER、BINARY、DOUBLE 和 BOOLEAN。

  • 数据版本号(时间戳)默认由服务端自动生成,如需自定义,可在 addColumn 中传入第三个参数 timestamp,详见数据版本号

condition(可选)

Condition

写入条件,默认无条件覆盖。详见条件写入

returnType(可选)

ReturnType

返回类型,通过 setReturnType 设置。

  • RT_NONE(默认):不返回任何数据。

  • RT_PK:返回主键列,常用于自增列读出。

  • RT_AFTER_MODIFY:返回修改后的列值,常用于原子计数器

场景示例

写入多个属性列

通过多次调用 addColumn 逐列添加,或一次性传入 List<Column> 构造。

String tableName = "put_row_demo";

PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row2"));
PrimaryKey primaryKey = primaryKeyBuilder.build();

RowPutChange rowPutChange = new RowPutChange(tableName, primaryKey);

// 方式一:多次调用 addColumn 逐列添加
rowPutChange.addColumn("name", ColumnValue.fromString("Alice"));
rowPutChange.addColumn("age", ColumnValue.fromLong(30));
rowPutChange.addColumn("active", ColumnValue.fromBoolean(true));

// 方式二:一次性传入 List<Column> 构造
List<Column> columns = new ArrayList<>();
columns.add(new Column("score", ColumnValue.fromDouble(95.5)));
columns.add(new Column("city", ColumnValue.fromString("Hangzhou")));
rowPutChange.addColumns(columns);

client.putRow(new PutRowRequest(rowPutChange));

指定数据版本号

使用 addColumn(name, value, timestamp) 在写入时指定数据版本号。

String tableName = "put_row_demo";

PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row3"));
PrimaryKey primaryKey = primaryKeyBuilder.build();

RowPutChange rowPutChange = new RowPutChange(tableName, primaryKey);

long timestamp = System.currentTimeMillis();
rowPutChange.addColumn("col1", ColumnValue.fromString("val1"), timestamp);

client.putRow(new PutRowRequest(rowPutChange));

自增列写入返回主键

自增列的主键值使用占位符 PrimaryKeyValue.AUTO_INCREMENT,由服务端生成真实值。设置 setReturnType(ReturnType.RT_PK) 后,可通过 response.getRow() 读出真实主键。

String tableName = "put_row_auto_inc_demo";

PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("partition_key", PrimaryKeyValue.fromString("pk1"));
primaryKeyBuilder.addPrimaryKeyColumn("auto_id", PrimaryKeyValue.AUTO_INCREMENT);
PrimaryKey primaryKey = primaryKeyBuilder.build();

RowPutChange rowPutChange = new RowPutChange(tableName, primaryKey);
rowPutChange.addColumn("payload", ColumnValue.fromString("hello"));
rowPutChange.setReturnType(ReturnType.RT_PK);

PutRowResponse response = client.putRow(new PutRowRequest(rowPutChange));
Row returnedRow = response.getRow();
System.out.println("Returned PK: " + returnedRow.getPrimaryKey());

相关文档