2011-03-23 11 views
14

में कर्सर आकार सीमा इंटरनेट से डीबी डाउनलोड करें। मैं इसे अपने डेटा फ़ोल्डर में सहेजता हूं और मैं इसे खोलता हूं। डीबी के अंदर 6 फ़ील्ड वाले "विज्ञापन" तालिका है। इन क्षेत्रों में से 2 बीएलओबी हैं। जब मैं इस तालिका से पढ़ना चाहता हूं ... मुझे कुछ समस्या है ... मैंने देखा कि जब मैं एक ब्लॉब फ़ील्ड के साथ एक पंक्ति को 1 मेगा बाइट से बड़ा करता हूं, तो यह अपवाद का कारण बनता है ... "पंक्ति से फ़ील्ड स्लॉट प्राप्त करें 0 col 0 विफल "। अगर यह थोड़ा ब्लॉब है, तो ठीक है ... अग्रिम धन्यवाद :)Android SQLiteDatabase

उत्तर

39

डायनामिक डिकंप्रेशन के कारण आंतरिक संपत्तियों पर 1 एमबी की सीमा है; 1 एमबी सीमा कर्सर ब्लॉब्स पर भी लागू होती है लेकिन ऐसा लगता है कि यह कहीं भी दस्तावेज नहीं है।

आम तौर पर आपको SQLite में ब्लॉब्स से बचने चाहिए क्योंकि वे खराब प्रदर्शन करते हैं; इसके बजाय ब्लॉब डेटा को फ़ाइल के रूप में सहेजें और फ़ाइल को अपने डीबी में स्थानांतरित करें।

+1

आम तौर पर आपको SQLite में ब्लॉब्स से बचने चाहिए क्योंकि वे खराब प्रदर्शन करते हैं; इसके बजाय ब्लॉब डेटा को फ़ाइल के रूप में सहेजें और फ़ाइल को अपने डीबी में स्थानांतरित करें। ---> बहुत बहुत धन्यवाद .. –

+0

एंड्रॉइडकिड सही है। मुझे यकीन है कि बीएलओबी के लिए उपयोग का मामला मौजूद है, हालांकि, मैं एक के बारे में नहीं सोच सकता। :) – Jonathan

1

क्या आप जिस क्वेरी का उपयोग कर रहे हैं वह 'ब्लॉब' कह रहा है? क्या आप इसे छोड़ सकते हैं? यदि आप नहीं कर सकते, तो आप उपयोग कर रहे हैं:

blob = rs.getBlob(column) ; 
InputStream in = blob.getBinaryStream(); 

या

blob.getBytes(1, lengthOblob) ; 

पहली विधि दूँगी आप मात्रा में ब्लॉब पढ़ें। दूसरा ब्लॉब एक ​​बार में लोड हो जाएगा।

+0

मुझे यकीन नहीं है कि "एक बार में सभी लोड" से आपका क्या मतलब है। यह देखते हुए कि 'getBlob() 'एक बाइट []' देता है, डेटा पहले से ही ढेर पर है ... – vaughandroid

+4

मान लीजिए कि आपका' आरएस 'एक कर्सर है, जो पहले कॉल करने के लिए कॉलबॉब() बड़े डेटा पर असफल हो जाएगा कर्सर विंडो आकार। – sgibly

1

लग रहा है एंड्रॉयड में ब्लॉब समर्थन की तरह अभी तक लागू नहीं किया जाता है ...

http://www.basic4ppc.com/forum/basic4android-updates-questions/6648-support-sqlite-blob.html

क्या डेटा ब्लॉब क्षेत्रों में संग्रहीत किया जाता है? मैं चित्रों का अनुमान लगाऊंगा।

मैं बीएलओबी का उपयोग न करने की सलाह दूंगा। फाइल सिस्टम बाइनरी डेटा के लिए एक बेहतर विकल्प है।

क्या आप डेटाबेस के साथ क्या हासिल करना चाहते हैं इसके बारे में कुछ और बता सकते हैं?

+0

बेहतर उत्तर: * किसी भी * डेटाबेस में बीएलओबी का उपयोग न करें।आरडीबीएम अनौपचारिक डेटा के बड़े टुकड़ों को संग्रहित करने के लिए विशेष रूप से उपयुक्त नहीं हैं- यही एक फाइल सिस्टम है। –

+0

@ डेविड साउथर टिप्पणी के लिए धन्यवाद, आप सही हैं। मुझे लगता है कि बीएलओबी कुछ के लिए उपयोगी हैं, इसलिए मैं थोड़ा कम निश्चित था। हालांकि, मैं एक अच्छे उपयोग के मामले के बारे में नहीं सोच सकता। ब्लूरे फिल्मों को संग्रहित करना? (मजाक) – Jonathan

+1

वह पोस्ट 2007 से है। बीएलओबी निश्चित रूप से समर्थित हैं, और कम से कम 1.6 (ए.के.ए. एपीआई स्तर 4, ए.के.ए. डोनट) के बाद से रहे हैं। ओपी के अनुसार, समस्या 1 एमबी से अधिक बीएलओबी मानों के साथ है। –

8

प्रति ऑपरेशन 1 एमबी सीमा है। (मुझे यकीन है कि यह प्रति पंक्ति है, या SQLite क्वेरी के मामले में प्रति कॉलम)। सीमा बाध्यकारी/पार्सल आईपीसी प्रणाली पर एसक्लाइट आउट-ऑफ-प्रोसेस के साथ इंटरैक्ट करने वाली SQLite API के कारण है। एक ही सीमा बंडल के भीतर मूल्यों के लिए लागू होती है (उदाहरण के लिए, इरादा अतिरिक्त)।

बाइंडर लेनदेन बफर एक सीमित तय आकार, वर्तमान में 1 एमबी, जो प्रक्रिया के लिए प्रगति में सभी लेनदेन द्वारा साझा किया जाता है।

देखें: http://developer.android.com/reference/android/os/TransactionTooLargeException.html

+1

1 एमबी सीमा कर्सर विंडो का अधिकतम आकार है। यह आईपीसी हस्तांतरण के लिए परिणाम पंक्तियों को स्टोर करने के लिए उपयोग किया जाने वाला मेमोरी बफर है। खिड़की का आकार इस सीमा तक गतिशील रूप से बढ़ता है। – WindRider

11

ब्लॉब वह यह है कि एक SQLite डेटाबेस से 100KB से कम फाइल सिस्टम से ही पढ़ने की तुलना में तेजी है पढ़ना। हालांकि, डीबी में संदर्भ के साथ डिस्क से सबसे ज्यादा कुछ भी रखा जाता है। अधिक: http://www.sqlite.org/intern-v-extern-blob.html

+1

संदर्भ के लिए धन्यवाद। –

+1

@frederick nyawaya: सबसे अच्छा क्या होगा? डेटाबेस में एक ब्लॉब के रूप में छवियों/ऑडियो भंडारण या बस फाइल सिस्टम के पथ भंडारण? फ़ाइल सिस्टम के हिस्से के रूप में – Ajay

+0

@Ajay –