如何根据特定条件构建查询。
我试过这个
QueryBuilder builder = SQlite.Select().from(Table)
if(condition) {
builder.where(something)
}
Cursor c = builder.query;
但不允许这样做。
我必须在我保存在首选项中的条件下查询我的数据库。我在Google文档中用Google搜索并搜索,但无法找到一个例子。 dbflow中是否存在此功能,如果是,那么如果没有使用此功能的任何其他orm(如greenDA)
答案 0 :(得分:3)
您可以在DBFlow中创建条件查询。要查询表的列,您必须将_Table
附加到您的类名,然后访问其属性。这些_Table
类是在构建期间生成的。
最简单的查询就是这个:
SQLite.select()
.from(YourTable.class)
.where(YourTable_Table.id.eq(someId)
.queryList();
您还可以在查询中使用.and
和.or
添加新条件:
SQLite.select()
.from(YourTable.class)
.where(YourTable_Table.id.eq(someId)
.and(YourTable_Table.name.eq(someName)
.queryList();
对于更干净的代码,您还可以将条件分组为条件组,如下所示:
ConditionGroup conditionGroup = ConditionGroup.clause();
conditionGroup.and(YourTable_Table.id.eq(someId);
if (someCondition) {
conditionGroup.and(YourTable_Table.name.eq(someName);
}
return SQLite.select()
.from(YourTable.class)
.where(conditionGroup)
.queryList();
答案 1 :(得分:2)
找到了解决问题的两种方法
1.来自@trevjonez(trevor jones)
Where<SomeModel> query = SQLite.select()
.from(SomeModel.class)
.where(SomeModel_Table.date_field.greaterThan(someValue));
if(someCondition) {
query = query.and(SomeModel_Table.other_field.eq(someOtherValue));
} else {
query = query.and(SomeModel_Table.another_field.isNotNull());
}
Cursor cursor = query.query();
//do stuff with cursor and close it
—
2.来自@zshock使用ConditionalGroup
ConditionGroup conditionGroup = ConditionGroup.clause();
conditionGroup.and(YourTable_Table.id.eq(someId);
if (someCondition) {
conditionGroup.and(YourTable_Table.name.eq(someName);
}
return SQLite.select()
.from(YourTable.class)
.where(conditionGroup)
.queryList();