2012-10-17 10 views
6

ग्रीनडाओ ने सिर्फ 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 समझाने। लेकिन अगर मैं कुछ तालिकाओं के साथ काम के लिए एक क्वेरी RawCreate() लिखना चाहता हूं, तो मुझे क्या करना चाहिए? यदि आपके पास कोई समाधान है तो कृपया अपना उत्तर अपडेट करें। –

+1

आपकी कच्ची क्वेरी के लिए अपडेट किया गया। –

5

अधिक आसान है:

अपना पूरा के लिए
dao.queryBuilder().where(Properties.SimpleName.like(name+"%")).list()