Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java从dynamodb读取表?_Java_Amazon Web Services_Amazon Dynamodb_Alexa - Fatal编程技术网

如何使用Java从dynamodb读取表?

如何使用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

我在Amazon dynamodb中创建了一个带有主键问题(String)的表,其中存储了数据。我想从表中读取值。我正在使用以下代码

@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);