【问题标题】:how to update a field value of a data store in google app engine using java如何使用java更新谷歌应用引擎中数据存储的字段值
【发布时间】:2012-12-28 13:06:03
【问题描述】:

我在数据存储中创建了一个登录名(种类)。在登录中,我创建了两个字段用户名和密码。当用户更改密码时,我想更新数据存储区中的字段值。但是当我使用这段代码时,

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Entity passwordchange = new Entity("Login");
passwordchange.setProperty("password", "admin@123");
datastore.put(passwordchange);

它创建一个新行并插入密码“admin@123”,而不是在同一行中更新新密码。

谁能建议我如何更新字段的数据。

【问题讨论】:

  • 您需要为每一行使用相同的实体对象。而且这不是一个表或关系数据库,所以不要认为它是一个。那只会让你陷入困境。
  • 阅读docs 并查看此answer
  • 所以我必须编写一个单独的 JDO 类来更新数据。你们说的对吗?
  • 您必须获取最初创建的实体并更新其内容,而不是创建一个新实体。
  • 很好,你能说一下如何获得相同的实体。我不知道如何获得它

标签: java google-app-engine google-cloud-datastore


【解决方案1】:

如果要更新实体,有两种选择:

A.通过其 ID 从数据存储中检索此实体。更新属性。将其放回数据存储区。

try {
    loginEntity = datastore.get(KeyFactory.createKey("login", id));
    loginEntity.setProperty("password", "admin@123");
    datastore.put(loginEntity);
} catch (EntityNotFoundException e) {
// This should never happen
}

B.使用相同的 id 创建一个新实体。添加所有属性。放入数据存储区 - 它将覆盖旧实体。

Entity loginEntity = new Entity("login", id);
loginEntity.setProperty("password", "admin@123");
datastore.put(loginEntity);

在这两个示例中,id 都是您要更改的实体的 id。

希望您不要将密码存储为字符串。

【讨论】:

  • 非常感谢安德烈,你是天才……我得到了我想要的。
  • 云库 (cloud.google.com/datastore/docs/reference/libraries) 是否可以做同样的事情?我找不到setProperty 方法
  • 在这些库中,它只是“设置”,例如'Entity task = Entity.newBuilder(taskKey) .set("description", "Buy milk") .build();'
猜你喜欢
  • 2011-02-10
  • 2014-10-21
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
相关资源
最近更新 更多