适用于 Java 的 AWS 开发工具包
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 DynamoDB 中的项目

在 DynamoDB 中,项目是属性 的集合,每个项目都包括一个名称 和一个。属性值可以为标量、集或文档类型。有关更多信息,请参阅 Amazon DynamoDB Developer Guide中的命名规则和数据类型

检索 (获取) 表中的项目

调用 DynamoDbClientgetItem 方法,并向其传递 GetItemRequest 对象(包含您所需项目的表名称和主键值)。该方法返回包含该项目的所有属性的 GetItemResponse 对象。您可以在 GetItemRequest 中指定一个或多个投影表达式以检索特定属性。

可以使用所返回 GetItemResponse 对象的 item() 方法,检索与项目关联的映射(键(字符串)和值 (AttributeValue) 对)。

导入

import software.amazon.awssdk.services.dynamodb.model.DynamoDbException; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.GetItemRequest; import java.util.HashMap; import java.util.Map; import java.util.Set;

代码

HashMap<String,AttributeValue> key_to_get = new HashMap<String,AttributeValue>(); key_to_get.put("Name", AttributeValue.builder() .s(name).build()); GetItemRequest request = null; if (projection_expression != null) { request = GetItemRequest.builder() .key(key_to_get) .tableName(table_name) .projectionExpression(projection_expression) .build(); } else { request = GetItemRequest.builder() .key(key_to_get) .tableName(table_name) .build(); } DynamoDbClient ddb = DynamoDbClient.create(); try { Map<String,AttributeValue> returned_item = ddb.getItem(request).item(); if (returned_item != null) { Set<String> keys = returned_item.keySet(); for (String key : keys) { System.out.format("%s: %s\n", key, returned_item.get(key).toString()); } } else { System.out.format("No item found with the key %s!\n", name); } } catch (DynamoDbException e) { System.err.println(e.getMessage()); System.exit(1); }

请参阅 GitHub 上的完整示例

在表中添加新项目

创建表示项目属性的键值对映射。其中必须包括表的主键字段的值。如果主键标识的项目已存在,那么其字段将通过该请求更新

注意

如果您的账户和区域没有该已命名的表,则将引发 ResourceNotFoundException 异常。

导入

import software.amazon.awssdk.services.dynamodb.model.DynamoDbException; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.PutItemRequest; import software.amazon.awssdk.services.dynamodb.model.ResourceNotFoundException; import java.util.ArrayList; import java.util.HashMap;

代码

HashMap<String,AttributeValue> item_values = new HashMap<String,AttributeValue>(); item_values.put("Name", AttributeValue.builder().s(name).build()); for (String[] field : extra_fields) { item_values.put(field[0], AttributeValue.builder().s(field[1]).build()); } DynamoDbClient ddb = DynamoDbClient.create(); PutItemRequest request = PutItemRequest.builder() .tableName(table_name) .item(item_values) .build(); try { ddb.putItem(request); } catch (ResourceNotFoundException e) { System.err.format("Error: The table \"%s\" can't be found.\n", table_name); System.err.println("Be sure that it exists and that you've typed its name correctly!"); System.exit(1); } catch (DynamoDbException e) { System.err.println(e.getMessage()); System.exit(1); }

请参阅 GitHub 上的完整示例

更新表中现有项目

可以使用 DynamoDbClientupdateItem 方法,通过提供要更新的表名称、主键值和字段映射,更新表中已有项目的属性。

注意

如果您的账户和区域没有该已命名的表,或者不存在由传入的主键标识的项目,会导致 ResourceNotFoundException 异常。

导入

import software.amazon.awssdk.services.dynamodb.model.DynamoDbException; import software.amazon.awssdk.services.dynamodb.model.AttributeAction; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.AttributeValueUpdate; import software.amazon.awssdk.services.dynamodb.model.ResourceNotFoundException; import software.amazon.awssdk.services.dynamodb.model.UpdateItemRequest; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import java.util.ArrayList; import java.util.HashMap;

代码

System.out.format("Updating \"%s\" in %s\n", name, table_name); if (extra_fields.size() > 0) { System.out.println("Additional fields:"); for (String[] field : extra_fields) { System.out.format(" %s: %s\n", field[0], field[1]); } } HashMap<String,AttributeValue> item_key = new HashMap<String,AttributeValue>(); item_key.put("Name", AttributeValue.builder().s(name).build()); HashMap<String,AttributeValueUpdate> updated_values = new HashMap<String,AttributeValueUpdate>(); for (String[] field : extra_fields) { updated_values.put(field[0], AttributeValueUpdate.builder() .value(AttributeValue.builder().s(field[1]).build()) .action(AttributeAction.PUT) .build()); } UpdateItemRequest request = UpdateItemRequest.builder() .tableName(table_name) .key(item_key) .attributeUpdates(updated_values) .build(); DynamoDbClient ddb = DynamoDbClient.create(); try { ddb.updateItem(request); } catch (ResourceNotFoundException e) { System.err.println(e.getMessage()); System.exit(1); } catch (DynamoDbException e) { System.err.println(e.getMessage()); System.exit(1); }

请参阅 GitHub 上的完整示例

更多信息