2015-05-12 14 views
6

Próbuję wykonać zapytanie do mojej bazy danych dla wszystkich modeli z kluczami podstawowymi na liście. To jest mój kwerendy (idsList jest ArrayList zawierających liczby całkowite):DBFlow wybierz gdzie COLUMN na liście?

new Select().from(PostModel.class) 
    .where(Condition.column(PostModel$Table.ID).in(0, idsList)) 
    .async().queryList(listener); 

Ale Android Studio podkreśla WHERE warunek, stwierdzając

"Cannot resolve method 'where(com.raizlabs.android.dbflow.sql.builder.Condition.In)" 

Więc nie Condition.In uważany za warunek? Jak mogę zapytać wszystkich modeli z kluczem primaryKey w ArrayList?

Używam DBFlow 2.0. Mogę również użyć zwykłego łańcucha zapytań SQL jako substytutu, ale nie jestem tak zorientowany w SQL, więc jeśli mógłbyś dostarczyć ciąg zapytania SQL dla mojego problemu, byłoby to możliwe.

+0

Czy to załatwić? Proszę zamieścić swoją odpowiedź. – surfer190

+0

Nie, ale przyjrzę się twojej odpowiedzi –

Odpowiedz

5

DBFlow v3.x teraz pozwala przekazać kolekcję Condition.in()

List<String> ids = new ArrayList<>(); 

Condition.In in = Condition.column(Tree_Table.ID.getNameAlias()).in(ids); 

long count = new Select().count().from(Tree.class) 
     .where(in) 
     .count(); 
+0

Używam raczej StringQuery –

1

Patrząc na DBFlow documentation, oświadczenie IN wzorowana jest tak, że jeśli idsList zawarte ["Test", "Test2", "TestN"] następnie kod musiałby być:

Condition.column(MyTable$Table.NAME).in("Test").and("Test2").and("TestN") 

... więc wygląda na to trzeba wyliczyć każdy element w tablicy.

Regularne SQL byłoby coś jak:

select * 
from PostModel 
where ID in ('Test', 'Test2', 'TestN') 

... ale to nadal oznacza, że ​​trzeba wymienić każdy element w tablicy.

+0

Dzięki, to jest dziwne, ponieważ .in() akceptuje wiele parametrów. Nie pomoże mi to zbytnio, ponieważ moja lista identyfikatorów może zawierać około 100 wpisów, ale dzięki temu sprawdzeniu! –

-1

miałem ten sam problem z Condition.In

Co zrobiłem było coś takiego:

Condition.In in = Condition.column(PostModel$Table.ID).in(0, idsList); 
ConditionQueryBuilder<PostModel> conditionQueryBuilder = new ConditionQueryBuilder<>(PostModel.class, in); 

List<PostModel> posts = new Select().from(PostModel.class).where(conditionQueryBuilder).queryList(); 

Odbywa się to z idsList za kulisami:

Collections.addAll(this.inArguments, idsList); 

Nadziei to pomaga.

+0

Spowoduje to utworzenie surowego kodu SQL: 'GDZIE' ID'' (0, '[1, 2, 3, 4, 5]') " – surfer190

5

Tworzenie In Stan:

List<String> ids = new ArrayList<String>(); 

Condition.In in = Condition.column(Tree$Table.ID).in(ids.get(0)); 
for (i = 1; i < ids.size(); i++){ 
     in.and(ids.get(i)); 
} 

long count = new Select().count().from(Tree.class) 
     .where(in) 
     .count(); 
Powiązane problemy