2014-04-10 14 views
11

Sto tentando di effettuare un aggiornamento di massa a una colonna utilizzando ActiveAndroid. Ecco il mio codice:Aggiornamento ActiveAndroid() query

new Update(SomeModel.class).set("Enabled = 0").execute(); 

Ma sto diventando un StackOverflowError. (Modifica: Il mio male, l'errore era da qualche altra parte). Qualcuno sa come eseguire una query Update()? Non dice nulla nel wiki di ActiveAndroid.

Edit:

Questa sintassi è corretta:

new Update(SomeModel.class) 
    .set("Enabled = 0") 
    .where("Account = ?", account.getId()) 
    .execute(); 

si può saltare il where se non necessario.

+0

È possibile aggiungere la traccia dello stack? –

+0

@jlhonora perché dovresti usare .set ("Abilita = 0") .. P.S: Sono nuovo su Android attivo .. –

+1

@Ajay perché è più performante del caricamento + del salvataggio. Specialmente se hai molti articoli da aggiornare. – jlhonora

risposta

16

Questa sintassi è corretta:

new Update(SomeModel.class) 
    .set("Enabled = 0") 
    .where("Account = ?", account.getId()) 
    .execute(); 

È possibile saltare il punto in cui non è necessario.

+0

è valido per essere '.set (" Enabled =? ", 0)'? –

+1

@Hamzeh si, anche questo è valido – jlhonora

11

Base su AndroidActive's github: "Il metodo di salvataggio funziona sia per l'inserimento che per l'aggiornamento dei record."
Quindi, se si desidera aggiornare un elemento, in primo luogo, è necessario leggerlo dal database, quindi modificarlo e infine salvarlo nuovamente.
Per esempio:

Foo for = Foo.load(Foo.class, 1);//1 is the id 
foo.bar = "new value"; 
foo.save(); 
+1

Ciò è altamente inefficiente, specialmente se è necessario aggiornare molti articoli. – jlhonora

+0

@jlhonora: se vuoi salvare molti oggetti, usa la transazione 'ActiveAndroid' [da qui] (https://github.com/pardom/ActiveAndroid/wiki/Saving-to-the-database#bulk-insert). A proposito, potresti dare una soluzione migliore? – Justin

1

È anche possibile utilizzare qualcosa di simile:

SomeModel model = selectField("fieldName", "fieldValue"); 
model.field = newValue; 
model.save(); 

dove selectField() metodo è:

public static SomeModel selectField(String fieldName, String fieldValue) { 
    return new Select().from(SomeModel.class) 
      .where(fieldName + " = ?", fieldValue).executeSingle(); 
} 
Problemi correlati