2016-09-05 88 views
2

如何基於某些條件構建查詢。查詢構建器dbflow條件查詢

我試着這樣做

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

,但它是不允許的。

我必須查詢我的數據庫的條件,我已經保存在首選項。我在搜索引擎中搜索到了各處,但無法找到一個示例。做這個功能是否存在於dbflow中如果是,那麼如果沒有任何其他orm(如greenDAO)如何使用此功能

回答

2

可以在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(); 
+0

ConditionalGroup是我失蹤了我的問題

1.從@trevjonez(特雷弗瓊斯)

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兩種方式... .thnks –

2

發現使用實現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();