2011-03-27 18 views
5

मैं सोच रहा था कि कोई मुझे एंड्रॉइड कर्सर का संक्षिप्त अवलोकन दे सकता है। विशिष्ट प्रश्न के एक जोड़े:SQLite डेटाबेस और कर्सर

1 - मैं एक तरीका है जिसके एक डेटाबेस क्वेरी के बाद एक कर्सर देता है:

public static Cursor getVehicles() 
{ 
    SQLiteDatabase db = vehicleData.getReadableDatabase(); 
    Cursor cursor = db.query(TABLE_NAME, GET_VEHICLES_FROM_CLAUSE, null, null, null, null, ORDER_BY); 

    return cursor; 
} 

आदेश गृह व्यवस्था करने के लिए, मैंने कोशिश की db.close() सिर्फ वापसी कथन से पहले । हालांकि, इसने कर्सर को कोई पंक्ति नहीं होने का कारण बना दिया। ऐसा क्यों है?

2 - कर्सर को बंद करने और डेटाबेस को बंद करने के बीच क्या अंतर है?

3 - क्या मुझे स्थानीय कर्सर होने पर कर्सर पर बंद करने की आवश्यकता है, या क्या मैं इसे कचरा कलेक्टर को साफ करने के लिए छोड़ सकता हूं?

4 - मेरा डेटाबेस छोटा है और केवल मेरे आवेदन द्वारा उपयोग किया जाता है - क्या मैं इसे अभी खोल सकता हूं?

उत्तर

9

1) कर्सर आपकी क्वेरी द्वारा लौटाए गए डेटा के लिए सिर्फ एक सूचक है, इसमें आपकी क्वेरी से सभी डेटा शामिल नहीं है। यह प्रदर्शन/दक्षता में वृद्धि करना है (बड़े परिणाम एक बार में नहीं पढ़े जाते हैं -> कम स्मृति का उपयोग किया जाता है)। इसलिए, यदि आप डेटाबेस बंद करते हैं, तो कर्सर डेटा पुनर्प्राप्त नहीं कर सकता -> यह खाली है।

2) जब आप कर्सर बंद करते हैं, तो सभी संबंधित संसाधन जारी किए जाते हैं -> आप इस कर्सर से जुड़े डेटा तक नहीं पहुंच सकते हैं (क्योंकि इसे जारी किया गया है), लेकिन आप इस या अन्य कर्सर का उपयोग करके नए प्रश्न बना सकते हैं। जब आप डेटाबेस बंद करते हैं, तो आप इसे अब और पूछ नहीं सकते हैं (जब तक आप इसे फिर से खोलें)।

3) हमेशा कर्सर बंद करें। अन्यथा आप समस्याओं में भाग लेंगे - जीसी शिकायत करेगा अगर कर्सर बंद नहीं है और नए प्रश्न अवरुद्ध हैं।

4) यदि आप अपना ऐप खत्म करते हैं तो इसे बंद करते हैं, हां।

+0

धन्यवाद अलीबी। 4 के संबंध में - क्या ऐप खत्म होने पर पता लगाने का कोई तरीका है? – barry

+0

आपकी गतिविधियां समाप्त होने पर बस डीबी बंद करें। आप इसके लिए ऑनस्ट्राय विधि का उपयोग कर सकते हैं। http://www.outofwhatbox.com/blog/2010/12/android-closing-those-database-objects/ – alibi

+0

यह होना चाहिए() - दस्तावेज कहता है कि हम ऑनस्ट्राय() पर भरोसा नहीं कर सकते हैं। – barry

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