2011-10-04 4 views
0

je le code suivant dans lequel je fais une recherche SimpleDB pour obtenir une liste des articles dans mon domaine avec l'attribut « Favorited ». Fondamentalement, j'essaye de mettre à jour la base de données d'utilisateurs pour avoir la quantité la plus récente de fois que chaque article a été "favorisé".Amazon Simple Db obtenir des éléments de la liste

noms d'éléments [] fonctionne parfaitement. Cependant, j'ai de la difficulté à extraire l'attribut. J'arrive à définir Attributs de liste qui finit par être [{Nom: Favori, Nom alternatifEncodage: null, Valeur: 5, AlternateValueEncoding: null,}]. De là cependant, je ne sais pas comment retirer l'attribut de la valeur.

End résultat que je veux favoritedValues ​​[i] = 5

En outre, il est possible que je vais sur ce la façon difficile, est-il un moyen plus facile de le faire?

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 
    } 
} 

Le guide de développement n'a pas été en mesure de m'aider. Chaque fois que je cherchais des informations via google j'ai eu des informations sur ListViews ce qui n'était pas ce que je cherchais.

Répondre

0

Vous pouvez faire une boucle sur les attributs et trouver leurs noms et valeurs. Incidemment, je trouve cette syntaxe plutôt gênante. Pour obtenir un attribut avec un certain nom, vous devez faire une boucle jusqu'à ce que vous le trouviez. En passant, vous pouvez aussi le trouver plusieurs fois, car les attributs peuvent avoir plusieurs valeurs. Vous pouvez également trouver d'autres attributs au milieu, puisque les attributs ne sont pas triés.

Pour faciliter le processus, j'ai écrit une petite bibliothèque AmazonSdbHelper, qui permet une syntaxe comme suit.

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"); 
} 

Mieux encore il y a un projet appelé SimpleJpa, qui implémente JPA pour Amazon. Je voudrais essayer, quelqu'un a de l'expérience avec ça?

+0

Votre solution haut semble être assez inefficace ... surtout si vous avez beaucoup d'attributs et vous essayez seulement de tirer un. Est-ce vraiment le seul moyen? En outre, je ne suis pas familier avec (Attribut anAttribute: currentAttributes) ... pourriez-vous expliquer? – easycheese

+0

Puisque vous avez une liste d'attributs, vous devez la parcourir pour en trouver une. Vous pouvez sortir de la boucle lorsque vous en trouvez un, au cas où. Ce n'est pas inefficace, cependant, la boucle sur une liste est incroyablement rapide, surtout par rapport à la vitesse de SimpleDB. C'est ennuyeux et c'est mieux que vous écriviez une méthode pour faire cela pour vous comme je l'ai fait. En ce qui concerne la boucle, est appelée [boucle foreach] (http://stackoverflow.com/questions/85190/how-does-the-java-for-each-loop-work) qui a été introduit en Java 1.5 en 2004. – stivlo

+0

Je l'ai testé, vous avez raison, cela ne prend pas longtemps (au moins pour une petite base de données). Cela marchera pour moi, merci! – easycheese

Questions connexes