在 DynamoDB 范围键中插入项目
Inserting items in DynamoDB Range key
我创建了一个 DynamoDB table,其中包含以下详细信息:
我正在尝试在我的 table 中插入项目:
public static void insertItems() {
AmazonDynamoDBClient ddb = UserPreferenceDemoActivity.clientManager
.ddb();
DynamoDBMapper mapper = new DynamoDBMapper(ddb);
try {
UserPreference userPreference = new UserPreference();
userPreference.setNavn("SalonSol");
for (int i = 800; i <= 1600; i = i + 50) {
userPreference.setTid(i);
userPreference.setMandag("Ledig");
userPreference.setTirsdag("Ledig");
userPreference.setOnsdag("Ledig");
userPreference.setTorsdag("Ledig");
userPreference.setFredag("Ledig");
userPreference.setLørdag("Ledig");
userPreference.setSøndag("Ledig");
Log.d(TAG, "Inserting Tid and Dage");
mapper.save(userPreference);
Log.d(TAG, "Tid and Dage inserted");
}
} catch (AmazonServiceException ex) {
Log.e(TAG, "Error inserting users");
UserPreferenceDemoActivity.clientManager
.wipeCredentialsOnAuthError(ex);
}
}
但 AWS 不断返回以下异常:
AmazonserviceException: The provided key element does not match the schema
Status Code: 400
我实际上是插入一个字符串值作为散列键和整数值作为范围,所以我真的不明白为什么我会收到这个异常。
我对 UserPreference 的定义 class:
@DynamoDBTable(tableName = Constants.TEST_TABLE_NAME)
public static class UserPreference {
private String Navn;
private int Tid;
private String Mandag;
private String Tirsdag;
private String Onsdag;
private String Torsdag;
private String Fredag;
private String Lørdag;
private String Søndag;
@DynamoDBHashKey(attributeName = "Navn")
public String getNavn() {
return Navn;
}
public void setNavn(String Navn) {
this.Navn = Navn;
}
@DynamoDBRangeKey(attributeName = "Tid")
public int getTid() {
return Tid;
}
public void setTid(int Tid) {
this.Tid = Tid;
}
@DynamoDBAttribute(attributeName = "Mandag")
public String getMandag() {
return Mandag;
}
public void setMandag(String Mandag) {
this.Mandag = Mandag;
}
@DynamoDBAttribute(attributeName = "Tirsdag")
public String getTirsdag() {
return Tirsdag;
}
public void setTirsdag(String Tirsdag) {
this.Tirsdag = Tirsdag;
}
@DynamoDBAttribute(attributeName = "Onsdag")
public String getOnsdag() {
return Onsdag;
}
public void setOnsdag(String Onsdag) {
this.Onsdag = Onsdag;
}
@DynamoDBAttribute(attributeName = "Torsdag")
public String getTorsdag() {
return Torsdag;
}
public void setTorsdag(String Torsdag) {
this.Torsdag = Torsdag;
}
@DynamoDBAttribute(attributeName = "Fredag")
public String getFredag() {
return Fredag;
}
public void setFredag(String Fredag) {
this.Fredag = Fredag;
}
@DynamoDBAttribute(attributeName = "Lørdag")
public String getLørdag() {
return Lørdag;
}
public void setLørdag(String Lørdag) {
this.Lørdag = Lørdag;
}
@DynamoDBAttribute(attributeName = "Søndag")
public String getSøndag() {
return Søndag;
}
public void setSøndag(String Søndag) {
this.Søndag = Søndag;
}
}
和 table 名称在 "Constants" class 中具有以下定义:
public static final String TEST_TABLE_NAME = "EkstraTable";
我试图通过复制和粘贴您的代码来重现该问题,然后将其更改为写入我自己的测试 table。问题没有发生,我按照你的代码成功地将所有项目放入 table:
http://i.imgur.com/lIPgn7P.png
我建议检查以确保您拥有最新版本的 AWS Java SDK,并且 table 已正确创建(为了安全起见,我通过控制台创建了我的,你如果升级后代码仍然无法使用,可以试试。
我发现了问题。我通过导入犯了一个大错误:
com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey
而不是:
com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBRangeKey
@DynamoDBRangeKey 注释,因为我使用的是 Android 移动 SDK。我通过为 2.1.8 下载并添加 DynamoDBMapper.jar 发现了问题,而这个版本显示
com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey
已弃用。
我创建了一个 DynamoDB table,其中包含以下详细信息:
我正在尝试在我的 table 中插入项目:
public static void insertItems() {
AmazonDynamoDBClient ddb = UserPreferenceDemoActivity.clientManager
.ddb();
DynamoDBMapper mapper = new DynamoDBMapper(ddb);
try {
UserPreference userPreference = new UserPreference();
userPreference.setNavn("SalonSol");
for (int i = 800; i <= 1600; i = i + 50) {
userPreference.setTid(i);
userPreference.setMandag("Ledig");
userPreference.setTirsdag("Ledig");
userPreference.setOnsdag("Ledig");
userPreference.setTorsdag("Ledig");
userPreference.setFredag("Ledig");
userPreference.setLørdag("Ledig");
userPreference.setSøndag("Ledig");
Log.d(TAG, "Inserting Tid and Dage");
mapper.save(userPreference);
Log.d(TAG, "Tid and Dage inserted");
}
} catch (AmazonServiceException ex) {
Log.e(TAG, "Error inserting users");
UserPreferenceDemoActivity.clientManager
.wipeCredentialsOnAuthError(ex);
}
}
但 AWS 不断返回以下异常:
AmazonserviceException: The provided key element does not match the schema
Status Code: 400
我实际上是插入一个字符串值作为散列键和整数值作为范围,所以我真的不明白为什么我会收到这个异常。
我对 UserPreference 的定义 class:
@DynamoDBTable(tableName = Constants.TEST_TABLE_NAME)
public static class UserPreference {
private String Navn;
private int Tid;
private String Mandag;
private String Tirsdag;
private String Onsdag;
private String Torsdag;
private String Fredag;
private String Lørdag;
private String Søndag;
@DynamoDBHashKey(attributeName = "Navn")
public String getNavn() {
return Navn;
}
public void setNavn(String Navn) {
this.Navn = Navn;
}
@DynamoDBRangeKey(attributeName = "Tid")
public int getTid() {
return Tid;
}
public void setTid(int Tid) {
this.Tid = Tid;
}
@DynamoDBAttribute(attributeName = "Mandag")
public String getMandag() {
return Mandag;
}
public void setMandag(String Mandag) {
this.Mandag = Mandag;
}
@DynamoDBAttribute(attributeName = "Tirsdag")
public String getTirsdag() {
return Tirsdag;
}
public void setTirsdag(String Tirsdag) {
this.Tirsdag = Tirsdag;
}
@DynamoDBAttribute(attributeName = "Onsdag")
public String getOnsdag() {
return Onsdag;
}
public void setOnsdag(String Onsdag) {
this.Onsdag = Onsdag;
}
@DynamoDBAttribute(attributeName = "Torsdag")
public String getTorsdag() {
return Torsdag;
}
public void setTorsdag(String Torsdag) {
this.Torsdag = Torsdag;
}
@DynamoDBAttribute(attributeName = "Fredag")
public String getFredag() {
return Fredag;
}
public void setFredag(String Fredag) {
this.Fredag = Fredag;
}
@DynamoDBAttribute(attributeName = "Lørdag")
public String getLørdag() {
return Lørdag;
}
public void setLørdag(String Lørdag) {
this.Lørdag = Lørdag;
}
@DynamoDBAttribute(attributeName = "Søndag")
public String getSøndag() {
return Søndag;
}
public void setSøndag(String Søndag) {
this.Søndag = Søndag;
}
}
和 table 名称在 "Constants" class 中具有以下定义:
public static final String TEST_TABLE_NAME = "EkstraTable";
我试图通过复制和粘贴您的代码来重现该问题,然后将其更改为写入我自己的测试 table。问题没有发生,我按照你的代码成功地将所有项目放入 table:
http://i.imgur.com/lIPgn7P.png
我建议检查以确保您拥有最新版本的 AWS Java SDK,并且 table 已正确创建(为了安全起见,我通过控制台创建了我的,你如果升级后代码仍然无法使用,可以试试。
我发现了问题。我通过导入犯了一个大错误:
com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey
而不是:
com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBRangeKey
@DynamoDBRangeKey 注释,因为我使用的是 Android 移动 SDK。我通过为 2.1.8 下载并添加 DynamoDBMapper.jar 发现了问题,而这个版本显示
com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey
已弃用。