2014-04-10 21 views
11

ActiveAndroid kullanarak bir sütuna toplu güncelleştirme yapmaya çalışıyorum. İşte benim kod:ActiveAndroid Update() sorgusu

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

Ama StackOverflowError alıyorum. (Düzenle: Benim hatam, hata başka bir yerdeydi). Bir Update() sorgusunu nasıl yürüteceğini bilen var mı? ActiveAndroid'in wiki'sinde hiçbir şey söylemiyor.

Düzenleme:

Bu sözdizimi doğrudur: gerekli değilse

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

Sen where atlayabilirsiniz.

+0

Yığın izinizi ekleyebilir misiniz? –

+0

@jlhonora neden kullanmalısınız .set ("Enable = 0") .. P.S: Aktif Android için yeniyim .. –

+1

@Ajay, yükleme + kaydetmekten daha performanslı olduğu için. Özellikle güncellemek için birçok öğeniz varsa. – jlhonora

cevap

16

Bu sözdizimi doğrudur:

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

Gerekmiyorsa, atlayabilirsiniz.

+0

, .set ("Enabled =?", 0) 'olarak geçerli midir? –

+1

@Hamzeh evet, bu da geçerli – jlhonora

11

AndroidActive's github taban: "Kaydetme yöntemi, kayıtların eklenmesi ve güncelleştirilmesi için çalışır."
Eğer bir öğeyi güncellemek istiyorsanız, önce onu veritabanından okumalı, sonra değiştirmeli ve sonunda tekrar kaydetmelisiniz.

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

Çok fazla verimsiz, özellikle de birçok öğeyi güncellemeniz gerekiyorsa. – jlhonora

+0

@jlhonora: Eğer bir çok eşyayı koruyacak olursanız, 'ActiveAndroid işlemini 'buradan (https://github.com/pardom/ActiveAndroid/wiki/Saving-to-the-database#bulk-insert) kullanalım. Bu arada, daha iyi bir çözüm verebilir misin? – Justin

1

Ayrıca böyle bir şey kullanabilirsiniz:: ex

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

selectField() yöntemdir burada:

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