通过 SQL 写入数据

更新时间:
复制 MD 格式

通过 Java SDK 执行 INSERT 语句,向未开启局部事务功能的数据表写入一行或多行数据。

前提条件

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

  • 使用 5.17.11 及以上版本的 Tablestore Java SDK。

  • 已为待写入的数据表创建映射关系,且数据表未开启局部事务功能。

  • 使用 RAM 用户时,已授予 SQL_DML 权限。

功能说明

调用 sqlQuery 方法执行 INSERT 语句,向数据表写入数据。如果写入数据的主键已存在,请求会失败。

SQLQueryResponse sqlQuery(SQLQueryRequest request)

以下示例向 example_table 数据表写入一行数据。

String query = "INSERT INTO example_table "
        + "(tenant_id, pk, name, score) "
        + "VALUES (1, 'row1', 'example', 10)";
SQLQueryRequest request = new SQLQueryRequest(query);

SQLQueryResponse response = client.sqlQuery(request);
System.out.println("Affected rows: " + response.getAffectedRows());

参数说明

SQLQueryRequest 包含以下参数。

名称

类型

说明

query(必选)

String

要执行的 INSERT 语句,用于指定映射表名称、待写入的列和列值。

返回值

SQLQueryResponse 包含以下与写入结果相关的字段。

字段

类型

说明

affectedRows

long

通过 getAffectedRows() 获取成功写入的行数。

consumedCapacityByTable

Map<String, ConsumedCapacity>

通过 getConsumedCapacity() 获取各数据表消耗的读写 CU。服务端校验待写入数据时消耗读 CU,写入数据时消耗写 CU。

type

SQLStatementType

通过 getSQLStatementType() 获取 SQL 语句类型。执行 INSERT 语句时返回 SQL_INSERT

场景示例

批量写入数据

一条 INSERT 语句最多可以写入 200 行数据。批量写入的多行数据必须具有相同的分区键,并作为一个原子操作执行:全部写入成功或全部写入失败。

String query = "INSERT INTO example_table "
        + "(tenant_id, pk, name, score) VALUES "
        + "(1, 'row1', 'example-a', 10), "
        + "(1, 'row2', 'example-b', 20), "
        + "(1, 'row3', 'example-c', 30)";
SQLQueryRequest request = new SQLQueryRequest(query);

SQLQueryResponse response = client.sqlQuery(request);
System.out.println("Affected rows: " + response.getAffectedRows());