2017-04-20 97 views
1

我有下面的代碼: -java.lang.IllegalArgumentException異常在Dynamodb

Map<String, AttributeValue> eav = new HashMap<String, AttributeValue>(); 
    eav.put(":val1", new AttributeValue().withS("12")); 

    ScrapCategoryDO myObject = new ScrapCategoryDO(); 
    myObject.setCategoryName("Iron"); 
    DynamoDBQueryExpression<ScrapCategoryDO> queryExpression = new DynamoDBQueryExpression<ScrapCategoryDO>() 
      //.withHashKeyValues(myObject) 
      .withFilterExpression("UnitPrice < :val1") 
      .withExpressionAttributeValues(eav); 

    List<ScrapCategoryDO> latestReplies = mapper.query(ScrapCategoryDO.class, queryExpression); 
    Log.d(TAG, "Number of categories = "+latestReplies.size()); 
    for (ScrapCategoryDO reply : latestReplies) { 
     Log.d(TAG,"category name = "+reply.getCategoryName()+", unit price = "+ reply.getUnitPrice()); 
    } 

而且我正在與作爲評論.withHashKeyValues(myObject的),下面的錯誤。我想知道如何查詢整個表格而沒有任何過濾條件/條件或其他?我試過了: -

 DynamoDBQueryExpression<ScrapCategoryDO> queryExpression = new DynamoDBQueryExpression<ScrapCategoryDO>(); 

但是我還是得到了同樣的錯誤。

W/System.err的:java.lang.IllegalArgumentException異常:非法查詢表達式:在com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper:否散列關鍵條件在查詢
W/System.err的發現。 processKeyConditions(DynamoDBMapper.java:2424)
W/System.err的:在com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.createQueryRequestFromExpression(DynamoDBMapper.java:2386)
W/System.err的:在com.amazonaws。 mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.query(DynamoDBMapper.java:2169)
W/System.err:at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.query(Dyna moDBMapper.java:2130)
W/System.err:at com.example.rohitsingla.scrapman.MyActivity.FindAllScrapCategories(MyActivity.java:207)
W/System.err:at com.example.rohitsingla.scrapman。 MyActivity.access $ 000(MyActivity.java:26)
W/System.err的:在com.example.rohitsingla.scrapman.MyActivity $ 3.run(MyActivity.java:164)

回答

1

請使用掃描API從DynamoDB表中獲取所有記錄。這裏是示例代碼。

查詢API不能在沒有鍵屬性的情況下使用。

示例代碼: -

ScanResultPage<yourModelClass> yourModelClassResultPage = null; 
do { 
    DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(dynamoDBClient); 
    DynamoDBScanExpression scanExpression = new DynamoDBScanExpression(); 
    if (yourModelClassResultPage != null) { 
     scanExpression.setExclusiveStartKey(yourModelClassResultPage.getLastEvaluatedKey()); 
    } 
    yourModelClassResultPage = dynamoDBMapper.scanPage(yourModelClass.class, scanExpression); 

} while (yourModelClassResultPage.getLastEvaluatedKey() != null); 

Scan API documentation

+0

感謝您的回答。它正在工作。但我想將我的「CategoryName」字段設置爲關鍵字。我無法通過控制檯更新我的表格。需要幫助。 –

+0

如果您已將CategoryName定義爲鍵,則在插入後無法更新。如果您能接受答案並且開放新的問題,如果有一個新的問題爲每個人的利益和簡潔,將不勝感激。 – notionquest

相關問題