7

我正在尝试在我的数据库中查询具有列表中主键的所有模型。这是我的查询(idsList 是一个包含整数的 ArrayList):

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

但 Android Studio 突出显示 where 条件,说明

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

那么 Condition.In 不被视为条件吗?如何在 ArrayList 中使用 primaryKey 查询所有模型?

我正在使用 DBFlow 2.0。我也可以使用常规的 SQL 查询字符串作为替代,但我对 SQL 不是很精通,所以如果您可以为我的问题提供一个 SQL 查询字符串,那将是一种可能的解决方法。

4

5 回答 5

9

DBFlowv3.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();
于 2016-09-30T16:55:07.457 回答
6

创建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();
于 2015-07-30T09:39:31.407 回答
1

查看DBFlow 文档,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')

...但这仍然意味着您需要枚举数组中的每个项目。

于 2015-05-12T16:18:53.307 回答
1

对于那些使用 DBFlow 4.x 的人来说,现在更容易做到:

SQLite.select()
    .from(PostModel.class)
    .where(PostModel_Table.ID.in(idsList))
    .async()
    .queryList(listener);

只需将in(...)关键字与where(...)调用中的值列表一起使用即可。

于 2018-10-10T12:11:38.403 回答
-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);

希望这可以帮助。

于 2015-07-10T08:10:55.927 回答