2015-05-12 20 views
6

Ich versuche, meine Datenbank nach allen Modellen mit Primärschlüsseln in einer Liste abzufragen. Dies ist meine Abfrage (idsList eine Arraylist ist ganze Zahlen enthalten):DBFlow auswählen wo COLUMN in List?

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

Aber Android Studio unterstreicht die in dem Zustand,

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

So keine Bedingung gilt condition.In? Wie kann ich alle Modelle mit primaryKey in einer ArrayList abfragen?

Ich verwende DBFlow 2.0. Ich kann auch eine reguläre SQL-Abfrage-Zeichenfolge als Ersatz verwenden, aber ich bin nicht so versiert in SQL, also wenn Sie eine SQL-Abfrage-Zeichenfolge für mein Problem bereitstellen könnten, wäre das eine mögliche Problemumgehung.

+0

Haben Sie diese aussortiert? Bitte posten Sie Ihre Antwort. – surfer190

+0

Ich habe nicht, aber ich werde in Ihre Antwort schauen –

Antwort

5

DBFlow v3.x jetzt können Sie eine Sammlung passieren zu 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

ich verwende lieber StringQuery –

1

am DBFlow documentation der Suche wird die IN-Anweisung modelliert, so dass, wenn Ihr idsList["Test", "Test2", "TestN"] enthalten dann würde Ihr Code sein müssen:

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

... so ist es, wie Sie jeder aufzählen müssen Looks, Element im Array.

Die reguläre SQL wäre so etwas wie sein:

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

... aber das bedeutet noch Sie jedes Element im Array aufzuzählen brauchen.

+0

Danke, das ist seltsam, weil .in() mehrere Parameter akzeptiert. Auch wird es mir nicht viel helfen, denn meine Liste von IDs könnte etwa 100 Einträge enthalten, danke fürs Auschecken! –

-1

hatte ich das gleiche Problem mit Condition.In

Was habe ich so etwas wie das war:

Collections.addAll(this.inArguments, idsList); 

Hoffnung:

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

Das mit Ihrem idsList hinter den Kulissen geschieht das hilft.

+0

Das erzeugt Raw SQL: 'WHERE' ID' IN (0, '[1, 2, 3, 4, 5]') " – surfer190

5

erstellen In Zustand:

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