2012-10-17 5 views
6

GreenDAO unterstützt nur eine Position des LIKE-Operators. Es war " LIKE ?"Warum GreenDAO LIKE-Operator nicht vollständig unterstützt?

Ich möchte Datensätze mit einer Vielzahl von diesem Operator abrufen. wie beispielsweise " LIKE %?", " LIKE ?%" und " LIKE %?%". aber es wird nicht von GreenDAO unterstützt.

Auch ich habe queryRaw() und queryRawCreate() verwendet, leider hat es auch nicht funktioniert. Zum Beispiel:

libDocSeriesDao.queryRawCreate ( "Wo?%% 'T.Title Wie Oder T.ViewTitle Like '?%%'", AKeyword, aKeyword) .listLazy();

Jede Hilfe würde sehr geschätzt werden.

Antwort

8

Das Zeichen '%' darf nicht Teil der Abfragezeichenfolge sein, wenn Sie das '?' Charakter. Sie können eine beliebige Kombination von% verwenden, wenn Sie den Parameter binden.

Hier ist ein Beispiel, wie LIKE Abfragen verwendet werden (von greenDAO der Unit-Tests bei https://github.com/greenrobot/greenDAO/commit/788313904fa58a0c8628f6b2e016a4a385f344c6 genommen):

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

Das gleiche Prinzip für rohe Abfragen gültig ist. Für Ihr Beispiel sollten Sie Folgendes tun:

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

Außerdem muss einKeyword das% -Zeichen haben.

+0

Dank @greenrobot für Ihre komplette erklären. aber wenn ich eine Anfrage schreiben möchteRawCreate() für die Arbeit mit einigen Tabellen, Was soll ich tun? Wenn Sie eine Lösung haben, aktualisieren Sie bitte Ihre Antwort. –

+1

Für Ihre unbearbeitete Abfrage aktualisiert. –

5

ist leichter:

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