Java'da (AWS SDK v2) DynamoDB DeleteItem

AWS SDK for Java 2.x'te bir silme, tam birincil anahtarı taşıyan bir DeleteItemRequest'tir ve ReturnValue.ALL_OLD size orada gerçekten bir şey olup olmadığını söyler.

Aşağıdaki koda bir conditionExpression ekleyin; yine de derlenen bir hata geliştirir. Parçacığın altındaki ilk madde işte o hatadır.

Kod

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());
        }
    }
}

Açıklama

  • ConditionalCheckFailedException, DynamoDbException'ı genişletir — dolayısıyla yukarıdaki catch bloğu başarısız olmuş bir korumayı yutar ve sanki hizmet bozulmuş gibi yazdırır. İstek bir conditionExpression taşımaya başladığı anda önce daha dar türü yakalayın. İşini yapmış bir koşul bir hata değil, bir sonuçtur.
  • İstisna, kaybeden öğeyi taşır — isteğe returnValuesOnConditionCheckFailure(ReturnValuesOnConditionCheckFailure.ALL_OLD) koyun; e.item() size satırı DynamoDB'nin gördüğü hâliyle geri verir. AWS bedelini de söylüyor: "No read capacity units are consumed."
  • attributes() asla null döndürmez — hiçbir şeyle eşleşmeyen bir silme boş bir eşleme verir, dolayısıyla test isEmpty()'dir. "Hizmet hiçbir şey döndürmedi" ile "hizmet boş bir eşleme döndürdü"yü ayıran şey hasAttributes()'tır.
  • ReturnValue enum'u UpdateItem ile ortaktırreturnValues(ReturnValue.ALL_NEW) burada derlenir ve bir ValidationException olarak geri döner, çünkü "DeleteItem does not recognize any values other than NONE or ALL_OLD". Oluşturucunun String aşırı yüklemesi aynı hatayı gizler (tam küme).
  • Bir tabloyu boşaltmak bir API çağrısı değildirDeleteItem tam olarak bir anahtarı siler ve SDK'da çok sayıda öğeyi silen hiçbir şey yoktur. Bir tabloyu kırpmak, anahtarlar için bir Scan ve ardından toplu yazmalardır ve genellikle DeleteTable artı CreateTable'a kaybeder.

Görsel olarak yapın

Koruma koyduğunuz öznitelik ayrılmış bir sözcükse, koşulun bir # takma adına ihtiyacı vardır. Ayrılmış sözcük denetleyicisi, öznitelik adlarınızdan hangilerinin AWS'nin 573 sözcüklük listesinde olduğunu söyler ve olanlar için expressionAttributeNames eşlemesini üretir.

DynoTable, bir silmeyi tabloya ulaşmadan önce bir Bekleyen değişiklikler panelinde hazırlar. Cmd+Backspace seçili satırları hazırlar, Cmd+Shift+Backspace tek hamlede siler ve işler, hazırlanan her şey de geri alınabilir. DynoTable'ı indirin.

İlgili örnekler

Kaynaklar

En son 2026-07-28 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.