2012-12-28 8 views
8

Avevo creato un accesso (tipo) nell'archivio dati. All'interno del login, ho creato due campi username e passsword. Quando l'utente cambia la password, voglio aggiornare il valore del campo all'interno del datastore. ma quando ho usato questo codice,come aggiornare un valore di campo di un archivio dati nel motore di app di google utilizzando java

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

Si crea una nuova riga e inserisce il "admin @ 123" password invece di aggiornare la nuova password in stessa riga.

Qualcuno può suggerirmi come aggiornare i dati di un campo.

+0

È necessario utilizzare lo stesso oggetto Entity per ogni riga. E questo non è un database di tabelle o relazioni, quindi non pensarlo come uno. Questo ti farà solo scavare nei buchi. – Linuxios

+0

Leggi i [documenti] (https://developers.google.com/appengine/docs/java/datastore/jdo/creatinggettinganddeletingdata#Updating_an_Object) e vedi anche [risposta] (http://stackoverflow.com/questions/2679759/update-query-in-google-app-engine-data-store-java) – doru

+0

quindi devo scrivere una classe JDO separata per l'aggiornamento dei dati. è quello che stai dicendo? Ho ragione? – sathya

risposta

19

Se si desidera aggiornare un soggetto, si hanno due opzioni:

A. Recupera questa entità dal datastore per la sua identificazione. Aggiorna proprietà. Rimettilo nel Datastore.

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

B. Creare una nuova entità utilizzando lo stesso ID. Aggiungi tutte le proprietà. Inserisci in un datastore - sostituirà la vecchia entità.

In entrambi gli esempi id è l'ID della propria entità che si desidera modificare.

Spero che non vengano memorizzate le password come stringhe.

+0

Grazie mille Andrei, sei un genio ... ho esattamente quello che voglio. – sathya

+0

La stessa cosa è possibile con le librerie cloud (https://cloud.google.com/datastore/docs/reference/libraries)? Non riesco a trovare il metodo 'setProperty' – mbonnin

+0

In queste librerie è semplicemente" impostato ", ad es. 'Entity task = Entity.newBuilder (taskKey) . Set ("description", "Buy milk") .build();' –

Problemi correlati