Amazon Simple Db从列表中获取项目



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

itemNames[]很好。然而,我有麻烦拔出属性。我得到设置列表属性,最终是[{Name: Favorited, 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
    }
}

Dev指南不能帮助我。每次我通过谷歌搜索信息时,我得到的信息都不是我想要的。

您可以在属性上循环查找它们的名称和值。

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的项目,它为Amazon实现了JPA。我想试一试,有人用过吗?

相关内容

  • 没有找到相关文章

最新更新