2012-10-17 3 views
6

GreenDAO는 LIKE 연산자의 한 위치를 방금 지원했습니다. 그것은이 연산자의 다양한 레코드를 가져 오려고합니다. " LIKE ?"GreenDAO가 LIKE 연산자를 완벽하게 지원하지 않는 이유는 무엇입니까?

예를 들면 " LIKE %?", " LIKE ?%"" LIKE %?%"입니다. 하지만 GreenDAO에서는 지원하지 않습니다.

또한 queryRaw()queryRawCreate()을 사용했지만 불행히도 작동하지 않았습니다. 예를 들어 :

libDocSeriesDao.queryRawCreate ( "어디 T.Title처럼 '? % %'또는 T.ViewTitle처럼 '? % %'", aKeyword, aKeyword) .listLazy();

도움을 주시면 감사하겠습니다.

답변

8

'?'문자를 사용할 때 '%'문자는 검색어 문자열의 일부가 아니어야합니다. 캐릭터. 매개 변수를 바인딩 할 때 % 조합을 사용할 수 있습니다.

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()); 

같은 원칙은 원시 쿼리에 대한 유효 : 여기

은 ( https://github.com/greenrobot/greenDAO/commit/788313904fa58a0c8628f6b2e016a4a385f344c6에서 greenDAO의 단위 테스트에서 가져온) 쿼리처럼 사용하는 방법을 예입니다. 예를 들어 다음과 같이해야합니다.

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

또한 키워드에는 % 문자가 있어야합니다.

+0

감사 @greenrobot 설명. 하지만 일부 테이블 작업을 위해 queryRawCreate()를 작성하려면 어떻게해야합니까? 어떤 해결책이 있다면 답을 업데이트하십시오. –

+1

원시 쿼리에 대해 업데이트되었습니다. –

5

더 쉽게 : 완전한 대한

dao.queryBuilder().where(Properties.SimpleName.like(name+"%")).list() 
관련 문제