2012-07-09 10 views
13

क्या कोई समझता है कि Android पर SQLiteDatabase.CursorFactory का उपयोग कैसे करें? मैं एक सतत SQLiteCursor ऑब्जेक्ट प्राप्त करने के लिए देख रहा हूं जो एक SQL SELECT कथन का उपयोग करता है जहां इसके कई WHERE क्लॉज एक्सप्रेशन पैरामीटर का उपयोग करते हैं जिन्हें आवश्यकता से पहले प्रोग्रामेटिक रूप से बदला जा सकता है।SQLiteDatabase.CursorFactory का उपयोग कैसे करें

उदाहरण के लिए:

SELECT LocationID FROM Locations WHERE Latitude < northlimit AND Latitude > southlimit AND Longitude < eastlimit AND Longitude > westlimit; 

सीमा मापदंडों गतिशील रूप बदल जाएगा, एक बार हर 200 मि.से

मैं एक समस्या है जिसके तहत अगर मैं SQLiteDatabase.rawQuery("SELECT ..."); प्रणाली का उपयोग को हल करने की कोशिश कर रहा हूँ प्रत्येक नई क्वेरी के लिए एक नया CursorWindow बनाता है , अंत में स्मृति से बाहर चल रहा है। इसलिए मैं सिस्टम को मजबूर करने का एक तरीका खोजने की कोशिश कर रहा हूं कि न कि नए कर्सरविंडोज़ न बनाएं।

+0

पुनः पूछताछ से पहले आपको पुराने कर्सर को बंद करना चाहिए। इस तरह आपको स्मृति से बाहर नहीं होना चाहिए। जहां तक ​​मुझे पता है कि SQLite अपने क्वेरी परिणाम सेट पर यादृच्छिक पंक्ति पहुंच का समर्थन नहीं करता है। आप केवल एक SQLite परिणाम को शुरू से ही अंत तक पुन: सक्रिय कर सकते हैं। यादृच्छिक पहुंच की अनुमति देने के लिए एंड्रॉइड फ्रेमवर्क पूरे परिणाम को कर्सर में लोड करके उस समस्या के आसपास काम करता है। यदि आपकी क्वेरी बहुत सारी पंक्तियां (या बहुत अधिक डेटा) लौटाती है तो आप स्मृति की स्थिति से बाहर हो सकते हैं। – tiguchi

उत्तर

0
myCursor.close(); 
myDataBaseHelp.close(); 

और याद रखें, डेटा को निकालने के बाद इसे बंद करें!

1

आप .. अपनी यह राशि अप पूरी तरह से इस ट्यूटोरियल की जाँच कर सकते हैं:

http://www.youtube.com/watch?v=j-IV87qQ00M

और आप डीबी बंद हो जाना चाहिए, किसी भी उपयोग के बाद .. एक और तरीका कक्षा चर कर्सर करोड़ बनाने के लिए है और हर बार जब आप इसका इस्तेमाल इस जाँच: अगर (करोड़ == नल) करोड़ = नए .... बाकी // कुछ करना //

cr.close();

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