Amazon Simple Db получить предметы из списка - PullRequest
0 голосов
/ 04 октября 2011

У меня есть следующий код, в котором я запрашиваю SimpleDb, чтобы получить список элементов в моем домене вместе с атрибутом «Избранное». По сути, я пытаюсь обновить базу данных пользователей, чтобы каждый раз последний элемент был «избранным».

itemNames [] работает отлично. Тем не менее, у меня возникли проблемы с извлечением атрибута Я получаю настройку Список атрибутов , которая в итоге становится [{Имя: Favorited, AlternateNameEncoding: null, Значение: 5, AlternateValueEncoding: null,}] . Однако отсюда я не знаю, как извлечь атрибут Value.

Конечный результат, я хочу favouritedValues ​​[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 не смог мне помочь. Каждый раз, когда я искал информацию через Google, я получал информацию о ListViews, которая не была тем, что я искал.

1 Ответ

1 голос
/ 04 октября 2011

Вы можете зациклить атрибуты и найти их имена и значения.

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 для Amazon.Я хотел бы попробовать, у кого-нибудь есть опыт?

...