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 | 主键信息,包括主键列名称和主键值。
|
columnsToPut(可选) | List<Column> | 属性列列表,可通过多次调用
|
condition(可选) | Condition | 写入条件,默认无条件覆盖。详见条件写入。 |
returnType(可选) | ReturnType | 返回类型,通过
|
场景示例
写入多个属性列
通过多次调用 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());