Java(AWS SDK v2)中的 DynamoDB DeleteItem

DeleteItem完整主键移除单个项目。在 AWS SDK for Java 2.x 中,你构建一个 DeleteItemRequest 并在 DynamoDbClient 上调用 deleteItem;配合 ReturnValue.ALL_OLD,响应会告诉你是否真的删除了什么。

Code

import java.util.HashMap;
import java.util.Map;

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
import software.amazon.awssdk.services.dynamodb.model.DeleteItemRequest;
import software.amazon.awssdk.services.dynamodb.model.DeleteItemResponse;
import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;
import software.amazon.awssdk.services.dynamodb.model.ReturnValue;

public class DeleteItemExample {
    public static void main(String[] args) {
        try (DynamoDbClient ddb = DynamoDbClient.builder()
                .region(Region.US_EAST_1)
                .build()) {

            Map<String, AttributeValue> key = new HashMap<>();
            key.put("Artist", AttributeValue.builder().s("Arturo Sandoval").build());
            key.put("SongTitle", AttributeValue.builder().s("Cubano Chant").build());

            DeleteItemRequest request = DeleteItemRequest.builder()
                    .tableName("Music")
                    .key(key)
                    .returnValues(ReturnValue.ALL_OLD)
                    .build();

            DeleteItemResponse response = ddb.deleteItem(request);
            if (response.attributes().isEmpty()) {
                System.out.println("No item with that key existed");
            } else {
                System.out.println("Deleted: " + response.attributes());
            }
        } catch (DynamoDbException e) {
            System.err.println(e.getMessage());
        }
    }
}

说明

  • key — 必须包含每个主键属性:简单键仅需分区键,复合键则需分区键排序键。
  • 删除是幂等的 — 删除一个不存在的键仍是成功(无错误)。配合 returnValues(ReturnValue.ALL_OLD),被删除的项目会在 response.attributes() 中返回;空映射意味着那里本来什么都没有。
  • DeleteItemReturnValues 仅支持 NONE(默认)和 ALL_OLDALL_NEW/UPDATED_* 选项属于 UpdateItem
  • 条件删除 — 加上一个 conditionExpression(例如 attribute_exists(Artist) 以在项目缺失时失败,或 Awards = :zero 以在某个值上做守卫);失败的条件会抛出 ConditionalCheckFailedException
  • DeleteItem 每次调用移除一个项目。没有"删除全部"的 API——要清空一张表,请用 Scan 迭代键并批量删除,或删除表后重新创建。

可视化操作

用条件来保护删除?DynamoDB Expression Builder 会替你组装 ConditionExpression 以及名称/值映射。

想在 GUI 中删除项目——选中行、确认、完成,生成的代码只需一次点击即可获得——请下载 DynoTable

相关示例

References

Last verified 2026-07-13 against the official AWS documentation linked above.

无需控制台即可使用 DynamoDB

DynoTable 是面向 DynamoDB 的快速桌面客户端 —— 浏览表、运行 SQL 风格的查询,并在本地编辑项。