2015-05-12 7 views
6

Sto provando a interrogare il mio database per tutti i modelli con chiavi primarie in un elenco. Questa è la mia interrogazione (idsList è un ArrayList contenente numeri interi):DBFlow seleziona dove COLUMN in elenco?

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

Ma Android Studio mette in evidenza la condizione in cui, affermando

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

Quindi non è condition.In considerata una condizione? Come posso interrogare tutti i Modelli con primaryKey in un ArrayList?

Sto utilizzando DBFlow 2.0. Posso anche usare una normale query String SQL come sostituto, ma non sono esperto in SQL, quindi se potessi fornire una query SQL String per il mio problema, sarebbe una soluzione possibile.

+0

Avete risolto questa situazione? Per favore pubblica la tua risposta. – surfer190

+0

Non l'ho fatto, ma guarderò nella tua risposta –

risposta

5

DBFlow v3.x ora consente di passare una colletta per 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

preferisco usare StringQuery –

1

Guardando il DBFlow documentation, la dichiarazione IN è modellato in modo che se il vostro idsList conteneva ["Test", "Test2", "TestN"] quindi il codice avrebbe bisogno di essere:

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

... così sembra che sarà necessario elencare ogni elemento nell'array.

Il regolare SQL sarebbe qualcosa di simile:

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

... ma che significa ancora è necessario elencare ogni elemento dell'array.

+0

Grazie, questo è strano, perché .in() accetta più parametri. Inoltre non mi aiuterà molto, perché la mia lista di id potrebbe contenere circa 100 voci, grazie per averlo verificato! –

-1

Ho avuto lo stesso problema con Condition.In

Quello che ho fatto è stato qualcosa di simile:

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(); 

Questo viene fatto con il vostro idsList dietro le quinte:

Collections.addAll(this.inArguments, idsList); 

Speranza questo aiuta.

+0

Questo crea il grezzo SQL: 'WHERE' ID' IN (0, '[1, 2, 3, 4, 5]') " – surfer190

5

Creare un In Condizione:

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();