का उपयोग कर जटिल कच्चे प्रश्नों करने का सुरुचिपूर्ण तरह से मैं एक ContentProvider
का उपयोग अपने आवेदन के डेटाबेस के साथ बात करने के लिए और मैं एक समस्या का एक सा में चल रहा हूँ।एक ContentProvider
मेरे पास एक प्रश्न है जो थोड़ा जटिल है। यह इस तरह दिखता है:
String sql =
"select " +
" tblHistory._id _id, " +
" tblHistory.item item, " +
" tblHistory.updated_on updated_on, " +
" (select _id from tblList " +
"where tblList.item = tblHistory.item) list_id, " +
" 1 priority, " +
"from " +
" tblHistory " +
"where " +
" tblHistory.status <> 'STATE_DELETING' and " + selection + " " +
"union " +
"select " +
" tblSearch._id _id, " +
" tblSearch.item item, " +
" -1 updated_on, " +
" (select _id from tblList " +
"where tblList.item = tblSearch.product_name) list_id, " +
" 2 priority, " +
"from " +
" tblSearch " +
"where " +
" not exists (select * from tblHistory " +
"where tblHistory.item = tblSearch.product_name) " +
"order by " +
" priority, _id asc";
c = mDb.rawQuery(sql, null);
चुनाव है:
String where = "tblHistory.user_id="
+ Integer.toString(intUserId)
+ " and tblHistory.item like '%"
+ strSearch + "%'";
मेरे समस्या मेरी उप प्रश्नों है। मुझे एक बाधा है जो मुझे जोड़ने की ज़रूरत है, लेकिन विधि को पाइप के नीचे उस बाधा को पाने का कोई अच्छा तरीका नहीं है। मुझे उप-प्रश्नों पर सही user_id का उपयोग करने की आवश्यकता है।
इस बिंदु पर, मुझे लगता है कि मैं 2 विकल्प हैं:
1) बाहर पार्स चयन से user_id
सबस्ट्रिंग।
2) विधि को "user_id = " + Integer.toString(intUserId)
पारित करने के लिए एक हैक के रूप में selectionArgs
का प्रयोग करें।
कोई अन्य विचार?
मुझे ध्यान रखना चाहिए कि जब मैं कुछ भी हैक-आईश नहीं कर रहा हूं, तो मैंने अपना ContentProvider
निजी बनाया है क्योंकि इसका उद्देश्य केवल मेरे आवेदन द्वारा उपयोग किया जाना है; तो अगर मुझे बिल्कुल करना है, तो मैं कर सकता हूं।
खुद पर एक एहसान और उपयोग '" "+ intUserId' बजाय' Integer.toString (intUserId) की 'क्या है। : पी –
http://stackoverflow.com/a/6548733/633187 देखें। क्या इससे आपके सवाल का जवाब मिलता है? – jcwenger
एंड्रयू, एलेक्स की टिप्पणी का विस्तार करने के लिए (यह है एक छोटा सा विषय से हटकर और अपने वास्तविक समस्या का समाधान नहीं करता है): जावा में स्ट्रिंग्स को ints परिवर्तित करने की सबसे कारगर तरीका Integer.toString उपयोग कर रहा है, लेकिन यदि आप करने जा रहे हैं एक स्ट्रिंग के साथ परिणाम को श्रेणीबद्ध, तो आप सिर्फ लिख सकते हैं: स्ट्रिंग जहां = "tblHistory.user_id =" + intUserId + "और tblHistory.item '% + strSearch +"% की तरह "'"; –