如何使用Java从dynamodb读取表?
我在Amazon dynamodb中创建了一个带有主键问题(String)的表,其中存储了数据。我想从表中读取值。我正在使用以下代码如何使用Java从dynamodb读取表?,java,amazon-web-services,amazon-dynamodb,alexa,Java,Amazon Web Services,Amazon Dynamodb,Alexa,我在Amazon dynamodb中创建了一个带有主键问题(String)的表,其中存储了数据。我想从表中读取值。我正在使用以下代码 @DynamoDBTable(tableName="Incident") AmazonDynamoDBClient dynamoDBClient = new AmazonDynamoDBClient(); String tableName = "Incident"; Table table = dynamoDBClient.getTable("Inciden
@DynamoDBTable(tableName="Incident")
AmazonDynamoDBClient dynamoDBClient = new AmazonDynamoDBClient();
String tableName = "Incident";
Table table = dynamoDBClient.getTable("Incident");
Item getItem=dynamoDBClient.getItem();
调用getTable
方法时出错。。。。它是一个预定义的方法,就像createTable()
一样,还是我们需要编写自己的..如果需要,如何编写?
以及应该使用什么方法读取表中的所有项目。。?
我用这个链接写了一些代码
我是Java新手,请提供帮助。以下是如何使用扫描API读取数据的示例:
@Override
protected ArrayList<String> doInBackground(String... params) {
String tableName = params[0];
ArrayList<String> tempList = new ArrayList<String>();
AmazonDynamoDBClient dynamoDBClient = new AmazonDynamoDBClient (
new BasicAWSCredentials(Constants.ACCESS_KEY_ID,
Constants.SECRET_KEY));
ScanRequest scanRequest = new ScanRequest()
.withTableName(tableName);
//.withAttributesToGet("name");
com.amazonaws.services.dynamodb.model.ScanResult result = dynamoDBClient.scan(scanRequest);
for (Map<String, AttributeValue> item : result.getItems()) {
tempList.add(item.toString());
//analizeItem(tempList, item);
}
return tempList;
}
@覆盖
受保护的ArrayList doInBackground(字符串…参数){
字符串tableName=params[0];
ArrayList tempList=新的ArrayList();
AmazondynamodClient dynamoDBClient=新的AmazondynamodClient(
新的BasicAWSCredentials(Constants.ACCESS\u KEY\u ID,
常数(密钥);
ScanRequest ScanRequest=新的ScanRequest()
.withTableName(tableName);
//.withAttributesToGet(“名称”);
com.amazonaws.services.dynamodb.model.ScanResult结果=dynamoDBClient.scan(scanRequest);
对于(映射项:result.getItems()){
添加(item.toString());
//analizeItem(圣殿骑士,物品);
}
返回圣殿骑士;
}
来自扫描API的引用可用于从表中获取所有项目 扫描应该一直进行到LastEvaluatedKey不为null,这对于获取所有项非常重要。否则,如果表中有许多项,即API每次扫描将返回1MB的数据,则不会获得所有项 默认情况下,扫描操作执行最终一致的读取,并且 它最多可以返回1MB(一页)的数据
Map lastKeyEvaluated=null;
做{
ScanRequest ScanRequest=新的ScanRequest()
.withTableName(“产品目录”)
.有限制(10)
.使用排他性EstartKey(lastKeyEvaluated);
ScanResult结果=client.scan(scanRequest);
对于(映射项:result.getItems()){
打印项目(项目);
}
lastKeyEvaluated=result.getLastEvaluatedKey();
}while(lastKeyEvaluated!=null);
非常感谢@conceptquest….我能够检索到所有的项目。您还可以帮助我获取一个关于如何基于主键检索单个项目的代码..使用getItem Api。。引用retrieveItem()方法。这不只是从扫描中获取第一组项目吗?如果有超过一个页面的价值,除非您使用ExclusiveStartKey,否则它将无法获取整个表,对吗?
Map<String, AttributeValue> lastKeyEvaluated = null;
do {
ScanRequest scanRequest = new ScanRequest()
.withTableName("ProductCatalog")
.withLimit(10)
.withExclusiveStartKey(lastKeyEvaluated);
ScanResult result = client.scan(scanRequest);
for (Map<String, AttributeValue> item : result.getItems()){
printItem(item);
}
lastKeyEvaluated = result.getLastEvaluatedKey();
} while (lastKeyEvaluated != null);