为什么GreenDAO不完全支持LIKE运算符?

时间:2012-10-17 05:46:50

标签: android greendao

GreenDAO只支持LIKE运算符的一个位置。那是" LIKE ?"

我想用各种运算符来获取记录。例如," LIKE %?"" LIKE ?%"" LIKE %?%"。但GreenDAO不支持。

我也使用了queryRaw()queryRawCreate(),但遗憾的是它也没有用。 例如:

  

libDocSeriesDao.queryRawCreate(           “T.Title喜欢'%?%'或T.ViewTitle喜欢'%?%'”,aKeyword,           aKeyword).listLazy();

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:8)

使用'?'时,'%'字符不能是查询字符串的一部分字符。绑定参数时,可以使用%的任意组合。

以下是如何使用LIKE查询的示例(取自greenDAO在https://github.com/greenrobot/greenDAO/commit/788313904fa58a0c8628f6b2e016a4a385f344c6的单元测试):

Query<TestEntity> query = dao.queryBuilder().where(Properties.SimpleString.like("%robot")).build();
TestEntity entity2 = query.uniqueOrThrow();
assertEquals(entity.getId(), entity2.getId());

query.setParameter(0, "green%");
entity2 = query.uniqueOrThrow();
assertEquals(entity.getId(), entity2.getId());

query.setParameter(0, "%enrob%");
entity2 = query.uniqueOrThrow();
assertEquals(entity.getId(), entity2.getId());

同样的原则对原始查询有效。对于您的示例,您应该这样做:

libDocSeriesDao.queryRawCreate(" Where T.Title Like ? Or T.ViewTitle Like ?", aKeyword, aKeyword).listLazy();

此外,aKeyword必须包含%字符。

答案 1 :(得分:5)

更容易:

dao.queryBuilder().where(Properties.SimpleName.like(name+"%")).list()