मैं डीबग करने का प्रयास करने के घंटों तक संघर्ष कर रहा हूं क्यों निम्नलिखित डिलीट क्वेरी वास्तव में कुछ भी नहीं हटाती है, भले ही सटीक उसी डेटाबेस पर सटीक वही क्वेरी फ़ायरफ़ॉक्स के SQLite प्रबंधक में ठीक काम करे:वास्तव में पंक्तियों को हटाने के लिए डिलीट rawQuery को एक चाल की आवश्यकता क्यों है?
String deleteSql = "DELETE FROM showsummary WHERE url IN (SELECT url FROM showsummary JOIN article_categories USING (url) WHERE categoryid=20 AND title LIKE 'page=%')";
mDb.rawQuery(deleteSql, null);
चूंकि यह है एक जॉइन और एक सब क्वेरी के साथ थोड़ा जटिल, मेरे विचार उप प्रश्नों के बारे में एंड्रॉइड के स्क्लाइट कार्यान्वयन में कुछ सीमाओं के आसपास घूमते थे इसलिए मैंने क्वेरी को सरल बनाने की कोशिश की। लेकिन फिर भी यह कुछ भी नहीं हटाया।
फिर मैंने इसे एक चुनिंदा क्वेरी में बदल दिया (बस SELECT * के साथ हटा दिया गया है) और यह काम करता है। तो शायद यह शामिल होने या उप-प्रश्न नहीं था जो बाद में अपराधी था।
चयन क्वेरी का परीक्षण करने के लिए मैंने लौटा कर्सर में moveToFirst()
जोड़ा था:
mDb.rawQuery(deleteSql, null).moveToFirst();
जब मैंने बाद में इसे फिर से एक डिलीट क्वेरी में बदल दिया, तो मैं moveToFirst()
को हटाने के लिए भूल गया और फिर यह काम किया!
यह अच्छा है कि यह अब काम करता है, लेकिन मैं बहुत उलझन में हूं कि वास्तव में कुछ भी हटाने के लिए कर्सर को स्थानांतरित करना क्यों आवश्यक है। क्या यह डिजाइन द्वारा है या यह एक बग है?
मैंने इस मूर्खता पर ** घंटों पर 4 घंटे की मौत की, उन्हें दस्तावेज़ीकरण में स्पष्ट रूप से बताया जाना चाहिए, समय की बर्बादी क्या है। – LuckyMe
मुझे पसंद है कि आपके प्रश्न में मेरी हटाई गई समस्याओं का उत्तर कितना कुशल है! – Noumenon
इसे खोजने के लिए धन्यवाद। यह निश्चित रूप से दस्तावेज किया जाना चाहिए! ऐसा नहीं होना चाहिए, मुझे लगता है, लेकिन कम से कम यह अब काम करता है। – kgrevehagen