我使用GreenDao v2.1.0生成了一个SQLite DB。 Here is its diagram (a tiny piece of it)
联系人可以有很多电话号码。 我想制作一个搜索查询:列出其GIVEN_NAME或FAMILY_NAME或PHONE.NUMBER包含特定字词的所有联系人。
例如,with these entries,如果我使用" bob"联系人Sponge Bob将被退回。如果我使用" 222"这个词,将返回联系人Patrick Star。
因为查询中涉及两个表,所以我使用这段代码来使用JOIN解决方案:
QueryBuilder<Contact> qb = getContactDao(context).queryBuilder();
qb.whereOr(ContactDao.Properties.Given_name.like("%" + word + "%"),
ContactDao.Properties.Family_name.like("%" + word + "%"));
qb.join(Phone.class, PhoneDao.Properties.Contact_id)
.where(PhoneDao.Properties.Number.like("%" + word + "%"));
List<Contact> contacts = qb.list();
这将生成以下SQL:
SELECT T."_id", T."GIVEN_NAME", T."FAMILY_NAME"
FROM "CONTACT" T
JOIN PHONE J1
ON T."_id"=J1."CONTACT_ID"
WHERE (T."GIVEN_NAME" LIKE ? OR T."FAMILY_NAME" LIKE ?) AND J1."NUMBER" LIKE ?
COLLATE LOCALIZED ASC
第5行指出了问题:&#34; AND&#34;连接器。我拼命想用&#34; OR&#34;取而代之。
我错过了什么吗?我要离开JOIN解决方案吗? 谢谢:))
答案 0 :(得分:1)
我有同样的问题。似乎greendao目前无法做到这一点。我正在使用queryRaw()
代替。