在 Java(AWS SDK v2)中使用 DynamoDB DeleteItem

DeleteItem 依項目的完整 primary key 移除單一項目。在 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 — 必須包含每一個 primary-key 屬性:simple key 只需 partition key,composite key 則需 partition sort key。
  • Delete 具冪等性 — 刪除一個不存在的 key 仍算成功(無錯誤)。搭配 returnValues(ReturnValue.ALL_OLD),被刪除的項目會回到 response.attributes()空 map 表示那裡本來就沒有東西。
  • DeleteItemReturnValues 只支援 NONE(預設)與 ALL_OLDALL_NEW/UPDATED_* 選項屬於 UpdateItem
  • 條件式刪除 — 加上 conditionExpression(例如以 attribute_exists(Artist) 讓缺少的項目失敗,或以 Awards = :zero 依值守衛);失敗的條件會拋出 ConditionalCheckFailedException
  • DeleteItem 每次呼叫只移除一個項目。沒有「全部刪除」的 API — 若要清空表格,請以 Scan 逐一取得 key 並批次刪除,或刪掉並重建表格。

改用視覺化操作

以條件為刪除加上守衛?DynamoDB Expression Builder 會為你組裝 ConditionExpression 與 name/value map。

想在 GUI 中刪除項目 — 選取列、確認、完成,產生的程式碼一鍵可得 — 下載 DynoTable

相關範例

References

最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。

不必透過主控台就能操作 DynamoDB

DynoTable 是一款快速的 DynamoDB 桌面用戶端 — 瀏覽表格、執行 SQL 風格的查詢,並在本機編輯項目。