DBFlow select 列表中的 COLUMN 在哪里?
DBFlow select where COLUMN in List?
我正在尝试在我的数据库中查询列表中具有主键的所有模型。这是我的查询(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 中查询所有具有主键的模型?
我正在使用 DBFlow 2.0。我也可以使用常规 SQL 查询字符串作为替代,但我对 SQL 不是那么精通,所以如果您可以为我的问题提供一个 SQL 查询字符串,那就是可能的解决方法。
查看 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')
...但这仍然意味着您需要枚举数组中的每一项。
我和 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);
希望对您有所帮助。
创建一个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();
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();
对于那些使用 DBFlow 4.x 的人来说,这现在更容易做到:
SQLite.select()
.from(PostModel.class)
.where(PostModel_Table.ID.in(idsList))
.async()
.queryList(listener);
只需在 where(...)
调用中使用 in(...)
关键字和值列表。
我正在尝试在我的数据库中查询列表中具有主键的所有模型。这是我的查询(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 中查询所有具有主键的模型?
我正在使用 DBFlow 2.0。我也可以使用常规 SQL 查询字符串作为替代,但我对 SQL 不是那么精通,所以如果您可以为我的问题提供一个 SQL 查询字符串,那就是可能的解决方法。
查看 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')
...但这仍然意味着您需要枚举数组中的每一项。
我和 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);
希望对您有所帮助。
创建一个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();
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();
对于那些使用 DBFlow 4.x 的人来说,这现在更容易做到:
SQLite.select()
.from(PostModel.class)
.where(PostModel_Table.ID.in(idsList))
.async()
.queryList(listener);
只需在 where(...)
调用中使用 in(...)
关键字和值列表。