2014-04-10 6 views
11

ActiveAndroid를 사용하여 열을 대량 업데이트하려고합니다. 여기에 내 코드입니다 :ActiveAndroid Update() 쿼리

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 왜 use.set ("Enable = 0") .. P.S : 저는 Active Android를 처음 사용합니다. –

+1

@Ajay는 + 저장을로드하는 것보다 성능이 뛰어 나기 때문에. 특별히 업데이트 할 항목이 많은 경우 – jlhonora

답변

16

이 구문은 올바른 :

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

필요없는 경우 건너 뛸 수 있습니다.

+0

은'.set ("Enabled =?", 0)'로 유효합니까? –

+1

@Hamzeh 네, 맞습니다. – 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 transaction' [여기에서] (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(); 
}