2012-12-28 12 views
8

データストアにログイン(種類)を作成しました。ログインの中で、usernameとpassswordという2つのフィールドを作成しました。ユーザーがパスワードを変更すると、データストア内のフィールド値を更新したいと思います。私は、Google App Engineでデータストアのフィールド値を更新する方法

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 
Entity passwordchange = new Entity("Login"); 
passwordchange.setProperty("password", "[email protected]"); 
datastore.put(passwordchange); 

をこのコードを使用する場合、それは新しい行を作成し、代わりに同じ行の新しいパスワードを更新するパスワード「123 @ admin」を挿入します。

フィールドのデータを更新する方法を誰にでも教えてください。

+0

各行に同じEntityオブジェクトを使用する必要があります。そして、これはテーブルや関係のデータベースではないので、それを1つのものと考えるべきではありません。それはちょうど穴にあなたを掘るでしょう。 – Linuxios

+0

[docs](https://developers.google.com/appengine/docs/java/datastore/jdo/creatinggettinganddeletingdata#Updating_an_Object)を読み、この[回答]を参照してください(http://stackoverflow.com/questions/2679759/update-query-in-google-app-engine-data-store-java) – doru

+0

私はデータを更新するために別のJDOクラスを作成する必要があります。あなたの人が言っていることは正しいのですか? – sathya

答えて

19

あなたはエンティティを更新する場合は、2つのオプションがあります。

A.は、そのIDによってデータストアからこのエンティティを取得します。プロパティを更新します。それをデータストアに戻します。

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

B.同じIDを使用して新しいエンティティを作成します。すべてのプロパティを追加します。データストアを配置する - 古いエンティティを上書きします。

Entity loginEntity = new Entity("login", id); 
loginEntity.setProperty("password", "[email protected]"); 
datastore.put(loginEntity); 

両方の例では、idは変更するエンティティのIDです。

パスワードを文字列として保存しないことをおすすめします。

+0

本当にありがとうAndreiあなたは天才です...私は私が欲しいものを正確に得た。 – sathya

+0

クラウドライブラリ(https://cloud.google.com/datastore/docs/reference/libraries)でも同じことが可能ですか?私は 'setProperty'メソッドを見つけることができません。 – mbonnin

+0

これらのライブラリでは、単に"設定 "されています。 'エンティティタスク= Entity.newBuilder(taskKey) .set( "description"、 "Buy milk") .build();' –