适用于 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;

代码

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.errorMessage()); 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;

代码

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); } System.out.println("Done!");

请参阅 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;

代码

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); } System.out.println("Done!");

请参阅 GitHub 上的完整示例

更多信息