2014-04-10 7 views
11

मैं ActiveAndroid का उपयोग करके कॉलम में थोक अद्यतन करने की कोशिश कर रहा हूं। यहाँ मेरी कोड है:सक्रिय एंड्रॉइड अपडेट() क्वेरी

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

लेकिन मैं एक StackOverflowError हो रही है। (संपादित करें: मेरा बुरा, त्रुटि कहीं और थी)। क्या कोई जानता है कि Update() क्वेरी कैसे निष्पादित करें? यह ActiveAndroid की विकी में कुछ भी नहीं कहता है।

संपादित करें:

इस वाक्य रचना सही है:

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

आप where को छोड़ सकते हैं अगर जरूरत नहीं।

+0

क्या आप अपना स्टैक ट्रेस जोड़ सकते हैं? –

+0

@jlhonora आप का उपयोग क्यों करना चाहिए .सेट ("सक्षम = 0") .. पीएस: मैं सक्रिय एंड्रॉइड के लिए नया हूं .. –

+1

@Ajay क्योंकि यह + बचत लोड करने से अधिक प्रदर्शनकारी है। विशेष रूप से यदि आपके पास अपडेट करने के लिए कई आइटम हैं। – jlhonora

उत्तर

16

इस वाक्य रचना सही है:

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

यदि आवश्यकता नहीं है तो आप कहां छोड़ सकते हैं।

+0

यह '.set (" सक्षम =? ", 0) के लिए मान्य है? –

+1

@ हम्ज़े हाँ, यह भी वैध है – jlhonora

11

AndroidActive's github पर आधार: "सहेजने की विधि रिकॉर्ड डालने और अद्यतन करने दोनों के लिए काम करती है।"
तो, यदि आप किसी आइटम को अपडेट करना चाहते हैं, तो पहले, आपको इसे डेटाबेस से पढ़ना होगा, फिर इसे संशोधित करना होगा, और अंततः इसे फिर से सहेजना होगा।
पूर्व के लिए:

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

यह अत्यधिक अक्षम है, खासकर यदि आपको बहुत सारी चीज़ें अपडेट करने की आवश्यकता है। – jlhonora

+0

@jlhonora: यदि आप बहुत सारी चीज़ें सहेजते हैं, तो 'ActiveAndroid लेनदेन' का उपयोग करें [यहां से] (https://github.com/pardom/ActiveAndroid/wiki/Saving-to-the-database#bulk-insert)। वैसे, क्या आप एक बेहतर समाधान दे सकते हैं? – Justin

1

तुम भी कुछ इस तरह का उपयोग कर सकते हैं:

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

जहां selectField() विधि है:

public static SomeModel selectField(String fieldName, String fieldValue) { 
    return new Select().from(SomeModel.class) 
      .where(fieldName + " = ?", fieldValue).executeSingle(); 
} 
संबंधित मुद्दे