2011-10-04 18 views
9

मैं इसके लिए नया हूं, कृपया मेरी मदद करें।एंड्रॉइड ऑर्मेलाइट जैसे() फ़ंक्शन काम नहीं कर रहा है

मैं (कॉलम नाम, मूल्य) फ़ंक्शन की तरह ऑर्मेलाइट का उपयोग करने की कोशिश कर रहा हूं, लेकिन यह मेरे लिए काम नहीं कर रहा है। लेकिन जब मैं पूर्ण पाठ का परीक्षण करता हूं तो यह "eq" फ़ंक्शन की तरह काम कर रहा है।

मेरे कोड है,

try { 
    QueryBuilder<MakeDTO, Integer> qb = makeDao.queryBuilder(); 
    qb.where().like("madeCompany", filterKey); 
    PreparedQuery<MakeDTO> pq = qb.prepare(); 
    return makeDao.query(pq); 
} catch (SQLException e) { 
    throw new AppException(e); 
} 

धन्यवाद।

उत्तर

11

सुंदर सरल है, तो आप वास्तव में स्ट्रिंग 'madeCompany' होने का यह पूछ रहे हैं यदि आप आंशिक मेल करने के लिए आप% वाइल्डकार्ड का उपयोग करने की जरूरत है चाहता हूँ आदि

public Where<T,ID> like(java.lang.String columnName, 
         java.lang.Object value) 
       throws java.sql.SQLException 
Add a LIKE clause so the column must mach the value using '%' patterns. 
Throws: 
java.sql.SQLException 

Where.like(java.lang.String, java.lang.Object)

29

एक पुराना सवाल है, लेकिन कुछ मैंने अभी हल किया है (ORMLite का दस्तावेज स्पष्ट नहीं है)। ORMLite को बताने के लिए आपको अपने क्वेरी पैरामीटर को "%" में लपेटने की आवश्यकता है ताकि आपकी क्वेरी स्ट्रिंग का कौन सा पक्ष किसी भी वर्ण से मेल खा सके।

उदाहरण के लिए, यदि आप अपने क्वेरी किसी भी madeCompany अपने स्ट्रिंग निम्न का उपयोग होता है, जो मिलान करना चाहते हैं:

try { 
    QueryBuilder<MakeDTO, Integer> qb = makeDao.queryBuilder(); 
    qb.where().like("madeCompany", "%"+filterKey+"%"); 
    PreparedQuery<MakeDTO> pq = qb.prepare(); 
    return makeDao.query(pq); 
} catch (SQLException e) { 
    throw new AppException(e); 
} 
+0

मुझे मदद की। धन्यवाद आदमी :) – Shirane85

+1

काम करने के लिए एस्ट्रोफ़े को भी जोड़ना सुनिश्चित करें: qb.where()। ("बनाया कॉम्पैनी", "%" + फ़िल्टरकी + "%" "); –

+0

@ जस्टिन: कोड स्निपेट के लिए धन्यवाद। असल में मैं कुछ प्रश्न पूछना चाहता हूं, "अगर मैं बी टाइप करता हूं तो इसे पहले बी के स्ट्रिंग्स को प्रदर्शित करना चाहिए, जिसमें बी शामिल है (हालांकि यह ए से शुरू हो रहा है)"। क्या यह इसके लिए एक तरीका है? –

1

कर सकते हैं इसके बाद के संस्करण जवाब जैसी क्वेरी समस्या हल हो गई है, लेकिन एसक्यूएल इंजेक्शन जोखिम है। यदि 'filterKey' का मान है, तो यह SQLException का कारण बन जाएगा, क्योंकि एसक्यूएल XXX से चुनें * xxx जैसे '%'% '। आप इस मामले के लिए से बचने के लिए, उदाहरण के SelectArg इस्तेमाल कर सकते हैं:

try { 
    String keyword = "%"+filterKey+"%"; 
    SelectArg selectArg = new SelectArg(); 
    QueryBuilder<MakeDTO, Integer> qb = makeDao.queryBuilder(); 
    qb.where().like("madeCompany", selectArg); 
    PreparedQuery<MakeDTO> pq = qb.prepare(); 
    selectArg.setValue(keyword); 
    return makeDao.query(pq); 
} catch (SQLException e) { 
    throw new AppException(e); 
} 

संदर्भ: http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_3.html#index-select-arguments

संबंधित मुद्दे