Amazon Simple Db从列表中获取项目

时间:2011-10-04 11:34:51

标签: java amazon-web-services amazon amazon-simpledb

我有以下代码,我在其中查询SimpleDb以获取我的域中的项目列表以及“收藏”属性。基本上我正在尝试更新用户数据库,以使每个项目被“收藏”的次数最多。

itemNames []完美无缺。但是,我在删除属性时遇到问题。我设置列表属性,最终是 [{Name:收藏,AlternateNameEncoding:null,Value:5,AlternateValueEncoding:null,}] 。但是从这里开始,我不知道如何提取Value属性。

最终结果我想 favoritedValues [i] = 5

另外,我可能会以困难的方式解决这个问题,有没有更简单的方法呢?

private void updateFavorites() {
    AmazonClientManager clientManager = new AmazonClientManager();

    AmazonSimpleDBClient aSDbClient = clientManager.sdb();

    String domainName = "domain";
    SelectRequest selectRequest2 = new SelectRequest( "select Favorited from `" + domainName + "`" ).withConsistentRead( true );

    List values = aSDbClient.select( selectRequest2 ).getItems();

    String[] itemNames = new String[ values.size() ];
    String[] favoritedValues = new String[ values.size()];


    for ( int i = 0; i < values.size(); i++ ) {
        itemNames[ i ] = ((Item)values.get( i )).getName();
        List attributes  = ((Item)values.get( i )).getAttributes();

        favoritedValues[i] = No idea what goes here
    }
}

开发指南无法帮助我。每次我通过谷歌搜索信息时,我都获得了ListViews的信息,这不是我想要的。

1 个答案:

答案 0 :(得分:1)

您可以循环访问属性并找到它们的名称和值。

List<Item> values;
Item currentItem = buffer.get(i);
itemNames[i] = currentItem.getName();
List<Attribute> currentAttributes = currentItem.getAttributes();
String favorited = "";
for (Attribute anAttribute : currentAttributes) {
    if (anAttribute.getName().equals("Favorited")) {
        favorited = anAttribute.getValue();
    }
}

顺便说一句,我发现这种语法很尴尬。要获取具有特定名称的属性,您必须循环直到找到它。顺便说一句,你可以多次找到它,因为属性可以有多个值。您还可以在中间找到一些其他属性,因为属性未排序。

为了方便这个过程,我编写了一个小型库AmazonSdbHelper,它允许使用如下语法。

PersistenceInterface store = new AmazonSdbHelper();
store.setDomain("domain");
store.query("SELECT * FROM domain");
while (store.hasNext()) {
    String key = store.next();
    String address = store.getAttributeAsString("address");
    Collection<String> phones = store.getAttributeAsCollection("phones");
    int visits = store.getAttributeAsInt("visits");
}

更好的是有一个名为SimpleJpa的项目,它为亚马逊实现了JPA。我想尝试一下,有人有经验吗?