जैसा कि एंड्रॉइड दस्तावेज़ कहते हैं, कच्चेQuery विधि के चयन ARR पैरामीटर स्ट्रिंग के रूप में पार्स किए जाते हैं।SQLite rawQuery selectArgs और Integers फ़ील्ड्स
SQLiteDatabase.rawQuery (स्ट्रिंग एसक्यूएल, String [] selectionArgs)
selectionArgs: आप शामिल हो सकते हैं में जहां क्वेरी, जो selectionArgs से मूल्यों से बदल दिया जाएगा में खंड?। मूल्य स्ट्रिंग्स के रूप में बाध्य होंगे।
लेकिन आज, मुझे एक समस्या का सामना करना पड़ा जिसने मेरे दिन का एक बड़ा हिस्सा लिया। निम्न क्वेरी की कल्पना करें:
SELECT * FROM TABLE_A WHERE IFNULL(COLUMN_A, 0) >= 15
COLUMN_A INTEGER है। तालिका में लगभग 10 पंक्तियां हैं जो मानदंडों में भाग लेती हैं। डेटाबेस संपादक पर क्वेरी चलाना, परिणाम हमेशा सही था, लेकिन, स्मार्टफोन पर, कथन हमेशा कोई पंक्ति नहीं लौटाता था।
कुछ समय के बाद, एक करने के लिए क्वेरी बदल दिया है:
SELECT * FROM TABLE_A WHERE IFNULL(COLUMN_A, 0) >= '15'
और संपादक सिर्फ एंड्रॉयड की तरह कोई भी पंक्ति वापस लौट आया। तो, क्वेरी को बदलना:
SELECT * FROM TABLE_A WHERE CAST(IFNULL(COLUMN_A, 0) as INTEGER) >= '15'
समस्या हल हो गई। एक और परीक्षण किया गया था:
SELECT * FROM TABLE_A WHERE COLUMN_A >= '15'
भी, सही परिणाम लौटा।
यह एक समस्या प्रतीत होती है जिसमें एंड्रॉइड IFNULL क्लॉज के साथ क्वेरी (स्ट्रिंग्स) के पैरामीटर को पैरामीटर से जोड़ता है।
तो, क्या कोई जानता है कि ऐसा क्यों हुआ? क्या क्वेरी पर CAST का उपयोग किए बिना इसे हल करने के लिए कोई सुझाव हैं?
मुझे एक ही समस्या थी और मैंने अपने ऐप में एक त्रुटि खोजने का प्रयास करने में एक घंटे बिताए। तब मुझे आपकी पोस्ट मिली है। इस प्रकार यह वास्तव में महान है कि आपने इसे यहां लिखा है। एक और बात यह है कि मैं कभी एंड्रॉइड दार्शनिक नहीं समझूंगा और यह सीएएसटी क्यों जरूरी है .... – user2707175