2016-09-05 9 views
2

特定の条件に基づいて照会を作成する方法を教えてください。クエリー・ビルダーdbflow条件付き照会

私はこの

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

をやってみましたが、それは許可されていません。

環境設定で保存した条件でデータベースを照会する必要があります。私はグーグルでどこにでもグーグルで検索して検索しましたが、1つの例は見つかりませんでした。この機能はdbflowに存在しますか?そうでない場合、この機能を持つその他のorm(greenDAOなど)はありません。

答えて

2

DBFlowで条件付き問合せを作成します。テーブルの列を照会するには、クラス名に_Tableを追加して、そのプロパティにアクセスする必要があります。これらの_Tableクラスは、ビルド時に生成されます。

最も単純なクエリは次のようになり、この1:

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

を使用して私の問題

1.from @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.from @zshockを達成するための二つの方法を発見しました... .thnks –

2

はConditionalGroup iが欠けていたものである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();