2015-05-12 3 views
6

Я пытаюсь запросить мою базу данных для всех моделей с первичными ключами в списке. Это мой запрос (idsList является ArrayList, содержащий целые числа):DBFlow выберите, где COLUMN в списке?

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

Но Android-студия выдвигает на первый план, когда условие, заявив

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

Так condition.In не считается состояние? Как я могу запросить все модели с primaryKey в ArrayList?

Я использую DBFlow 2.0. Я также могу использовать обычный SQL-запрос String в качестве замены, но я не настолько разбираюсь в SQL, поэтому, если бы вы могли предоставить SQL-запрос String для моей проблемы, это было бы возможным обходным путем.

+0

отсортирован ли вы это? Пожалуйста, напишите свой ответ. – surfer190

+0

Я не сделал этого, но посмотрю на ваш ответ –

ответ

5

DBFlow v3.x теперь позволяет передать коллекцию в 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

Я скорее использую StringQuery –

1

Глядя на DBFlow documentation, оператор IN смоделирована таким образом, что если ваш idsList содержал ["Test", "Test2", "TestN"], то ваш код должен был бы быть:

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

... так это выглядит, как вы должны будете перечислить каждый элемент в массиве.

Регулярное SQL будет что-то вроде:

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

... но это по-прежнему означает, что вы должны перечислить каждый элемент в массиве.

+0

Спасибо, это странно, потому что .in() принимает несколько параметров. Кроме того, это не поможет мне, потому что мой список идентификаторов может содержать около 100 записей, спасибо за проверку! –

-1

У меня была такая же проблема с condition.In

То, что я сделал что-то вроде этого:

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

Это делается с idsList за кулисами:

Collections.addAll(this.inArguments, idsList); 

Надежда это помогает.

+0

Это создает сырой SQL: 'WHERE' ID' IN (0, '[1, 2, 3, 4, 5]') " – surfer190

5

Создать In Состояние:

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(); 
Смежные вопросы