私はアンドロイドで新しく、greenDao ORMを学習してテストプロジェクトで使用することに決めました。where QueryBuilder on condition greenDao android
私はUserオブジェクトのリストを作成しています。各ユーザは複数の子を持つことができます。だから私は、ユーザーの子供を見つけることができるように子オブジェクト内のuserIdを保持します。
各子供には電話番号があります。これらの電話番号は一意です。だから、私は子供の電話番号がテーブルに存在してはならないことを確認する必要がありますユーザーのために子供を挿入する場合。
これを行うために、データベースからすべての子オブジェクトを取得するQueryBuilderを作成しました。 QueryBuilder<Child> childQuery = childDao().queryBuilder() .where(ChildeDao.Properties.UserId.eq(child.getUserId()));
これはすべての子供を取得するために使用されます。私は新しい子供を追加したい場合、私はそのphoneNumberを取得し、以下の条件をチェックします。このリストのサイズがゼロに等しい場合、それは私が子供を追加することができることを意味しますが、それはゼロよりも大きい場合には、この子が存在することを意味しますにphoneNumberは新しい子にphoneNumberであることを
childQuery.where(ChildDao.Properties.PhoneNumber.eq(phoneNumber)).list().size()
は注意してください。
しかし私の問題は、最初のクエリで子リストを取得すると、そのサイズが10であり、私の場合は正確であり、次に2番目のコードで条件をチェックすると、突然childQueryのサイズが1または0 。 (。新しい子の電話番号がDBに存在するかということに依存) ここで私が書いたまさにです:
QueryBuilder<Child> childQuery = childDao().queryBuilder()
.where(ChildeDao.Properties.UserId.eq(child.getUserId()));
for(int i = 0; i < newChildrenList.size(); i++)
{
String phoneNumber = newChildrenList.get(i).getPhoneNumber();
if(childQuery.where(ChildDao.Properties.PhoneNumber.eq(phoneNumber)).list().size()==0){
addChildToDB();
}
}
だから私の質問は、私は上記のコードと間違っているものを知ってはいけないということです。なぜchildQueryは条件の影響を受けますか?どのように私はその変更を防ぐ必要がありますか?
感謝を。パフォーマンスのためにどちらが良いですか? – TTS
'QueryBuilder'に' .where() 'を追加すると' List 'にのみパラメータが追加されます。 '.list()'を呼び出すまでクエリ自体は実行されません。私は両者の違いは重要ではないと思う。 –
FYIでは、フェッチされたデータにアクセスする必要がない場合は、 '.list()。size()'の代わりに '.count()'を使用できます。 –