2013-03-20 7 views
6

मैं एंड्रॉइड में Cursor के कार्यान्वयन विवरण के बारे में दिलचस्प हूं। मुझे पता है कि मूल रूप से यह केवल interface है जो डेटाबेस क्वेरी द्वारा लौटाए गए परिणाम सेट पर यादृच्छिक रीड-राइट एक्सेस प्रदान करता है। मुझे विशेष Cursor कार्यान्वयन के बारे में आश्चर्य है:एंड्रॉइड डेटाबेस कर्सर विवरण में कैसे लागू किया गया है?

  1. क्या यह किसी प्रकार की डेटा संरचना है जो डेटाबेस से परिणाम सेट करता है?
  2. या यह सिर्फ एक संरचना है जो केवल एक पंक्ति को संभालती है?

उत्तर

6

है बस कुछ डेटा संरचना जो भंडार डेटाबेस

हाँ से सेट परिणाम है।

या यह कुछ संरचना है जो केवल एक पंक्ति को संभालती है?

बिल्कुल नहीं। कर्सर स्रोत क्वेरी के आधार पर एक या अधिक पंक्तियों को संभाल सकता है। कर्सर डेटा का मानचित्र है और इसमें स्रोत (चयन) क्वेरी रिटर्न के रूप में कई पंक्तियां होंगी। इसलिए अगर क्वेरी सौ पंक्तियां लौटाती है, तो इन पंक्तियों को कर्सर और कर्सर में डाला जाता है जिसमें इन सौ पंक्तियां होती हैं।

आप कल्पना कर सकते हैं कि कर्सर गतिशील आकार (सूची के समान) के साथ डेटा के मानचित्र के रूप में जहां डेटा "पंक्तियों" के रूप में रखा जाता है। प्रत्येक पंक्ति में अपनी पंक्ति आईडी होती है (पंक्ति संख्या, हम कुछ सूचक कह सकते हैं) जो धीरे-धीरे उत्पन्न होता है क्योंकि उन्हें कर्सर में डाला जाता है और आप आसानी से इस संख्या के साथ पंक्तियों के बीच स्थानांतरित कर सकते हैं। स्पष्ट रूप से प्रत्येक कर्सर में "वास्तविक सूचक" होता है जो पहली पंक्ति (-1 स्थिति) से पहले स्थित होता है, इसलिए यदि आप c.getString(0) पर कॉल करते हैं तो निष्पादन फेंक दिया जाएगा क्योंकि पुनर्प्राप्त करने के लिए कुछ भी नहीं है।

तो हमेशा आपको cursor.moveToFirst() पर कॉल करना होगा जो पढ़ने के लिए कर्सर तैयार करता है और यदि खाली है, तो विधि वापस झूठी होती है क्योंकि कोई पंक्ति नहीं होती है।

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