查询构建器dbflow条件查询

时间:2016-09-05 03:05:18

标签: orm query-builder dbflow

如何根据特定条件构建查询。

我试过这个

QueryBuilder builder = SQlite.Select().from(Table)
    if(condition) {
         builder.where(something)
    }
Cursor c = builder.query;

但不允许这样做。

我必须在我保存在首选项中的条件下查询我的数据库。我在Google文档中用Google搜索并搜索,但无法找到一个例子。 dbflow中是否存在此功能,如果是,那么如果没有使用此功能的任何其他orm(如greenDA)

2 个答案:

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