我有以下代码,其中我查询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。我想试一试,有人用过吗?