DynamoDB UpdateItem in Java (AWS SDK v2)

UpdateItem ändert bestimmte Attribute eines Items (und erstellt das Item, falls es nicht existiert) und lässt alles andere unangetastet. Im AWS SDK for Java 2.x baust du einen UpdateItemRequest mit einer updateExpression.

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.DynamoDbException;
import software.amazon.awssdk.services.dynamodb.model.ReturnValue;
import software.amazon.awssdk.services.dynamodb.model.UpdateItemRequest;
import software.amazon.awssdk.services.dynamodb.model.UpdateItemResponse;

public class UpdateItemExample {
    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());

            Map<String, String> names = new HashMap<>();
            names.put("#upd0", "Genre");
            names.put("#upd1", "Year");
            names.put("#upd2", "Awards");

            Map<String, AttributeValue> values = new HashMap<>();
            values.put(":updValue0", AttributeValue.builder().s("Latin Jazz").build());
            values.put(":updValue1", AttributeValue.builder().n("1994").build());
            values.put(":updValue2", AttributeValue.builder().n("1").build());

            UpdateItemRequest request = UpdateItemRequest.builder()
                    .tableName("Music")
                    .key(key)
                    .updateExpression("SET #upd0 = :updValue0, #upd1 = :updValue1 ADD #upd2 :updValue2")
                    .expressionAttributeNames(names)
                    .expressionAttributeValues(values)
                    .returnValues(ReturnValue.ALL_NEW)
                    .build();

            UpdateItemResponse response = ddb.updateItem(request);
            System.out.println(response.attributes()); // the item after the update
        } catch (DynamoDbException e) {
            System.err.println(e.getMessage());
        }
    }
}

Erklärung

  • key — der vollständige Primärschlüssel des zu aktualisierenden Items.
  • updateExpression — eine oder mehrere Klauseln:
    • SET weist Attribute zu (#upd0 = :updValue0 setzt Genre; #upd1 = :updValue1 setzt Year). Jedes Attribut wird per expressionAttributeNames aliasiert, sodass reservierte Wörter wie Year immer sicher sind.
    • ADD auf einer Zahl macht ein atomares Inkrement (ADD #upd2 :updValue2 addiert 1 zu Awards) — sicher unter Nebenläufigkeit, kein Read-Modify-Write-Race. REMOVE löscht ein Attribut; DELETE entfernt Elemente aus einem Set.
  • expressionAttributeValues — die :placeholder → typisierter-AttributeValue-Map.
  • returnValues(ReturnValue.ALL_NEW) — gibt das vollständige Item nach dem Update in response.attributes() zurück (auch UPDATED_NEW, ALL_OLD, UPDATED_OLD oder NONE).
  • Upsert-SemantikUpdateItem erstellt das Item, wenn der Schlüssel nicht existiert. Füge eine conditionExpression hinzu (z. B. attribute_exists(Artist)) für Nur-Aktualisieren.
  • Bevorzuge eine Update-Expression gegenüber der veralteten attributeUpdates-Map — Expressions unterstützen mehrere Klauseln, Aliase und Bedingungen in einer Anfrage.

Visuell erledigen

Der DynamoDB Expression Builder baut SET / ADD / REMOVE-Klauseln mit den Name-/Wert-Maps und kopiert lauffähigen Code.

Um Items in einer GUI zu bearbeiten — ändere ein Feld, prüfe die generierte UpdateExpression, kopiere den Code — lade DynoTable herunter.

Verwandte Beispiele

References

Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.

Mit DynamoDB ohne die Console arbeiten

DynoTable ist ein schneller Desktop-Client für DynamoDB — durchsuche Tabellen, führe SQL-artige Queries aus und bearbeite Items lokal.