2009-04-17 5 views
16

वहाँ एक ब्लॉब स्तंभ से बाहर डेटा प्राप्त करने के 3 अलग अलग तरीके हैं: getBytes getBinaryStream getBlobgetBytes बनाम getBinaryStream बनाम getBlob

इसके अलावा, ब्लॉब ऑब्जेक्ट getBlob द्वारा दिया भी है एक GetBytes और उस पर बाइनरीस्ट्रीम मिलता है।

क्या कोई विशेष कारण हैं (प्रदर्शन, स्मृति, डेटाबेस विशिष्ट समस्याएं) कि मुझे एक दूसरे को चुनना चाहिए?

ब्लॉब ऑब्जेक्ट में एक मुफ्त() कॉल भी है जिसे जेडीबीसी 4.0 के बाद पेश किया गया है। क्या इससे कुछ अन्तर पड़ता है?

उत्तर

12

आप (यानी पर्याप्त डेटा स्मृति समस्याओं के कारण) डेटा का एक बहुत खींच करने जा रहे हैं, तो आप सबसे अधिक getBinaryStream लचीलापन की प्रक्रिया और डेटा को छोड़ आप में इसे पढ़ने के रूप में करने के लिए दे देंगे।

पर दूसरी तरफ, यह आपके जेडीबीसी चालक के आधार पर काफी धीमा हो सकता है, क्योंकि धारा से प्रत्येक पढ़ने से डाटाबेस के साथ बहुत सारे नेटवर्क चापलूसी हो सकती हैं। यदि आप GetBytes को कॉल करते हैं, तो ड्राइवर पूरी तरह से एक ही बार में लाने के लिए जानता है, जो अधिक कुशल होने की संभावना है।

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

+0

यह भी सुनिश्चित करने के लायक है कि आपके जेडीबीसी ड्राइवर के लिए GetBlob लागू किया गया है, इसके आधार पर कोड का एक गुच्छा लिखने से पहले। ज़ेरियल स्क्लाइट-जेडीबीसी, उदाहरण के लिए, वर्तमान में इसे लागू नहीं करता है। – Kelly

6

आम तौर पर आप बाइट-सरणी विधि के बजाय स्ट्रीम-आधारित विधियों (यानी getBlob() प्राप्त करें। बाइनरीस्ट्रीम() या getBinaryStream() प्राप्त करना चाहते हैं।

  1. प्रदर्शन। ड्राइवर को डेटाबेस से बाइट्स को बढ़ाने के लिए एक मौका है।
  2. मेमोरी। आपको एक ही समय में सभी बाइट्स लोड करने की ज़रूरत नहीं है, और एक संगत ब्लॉक में।

सबसे खराब स्थिति डेटाबेस (या जेडीबीसी चालक) वास्तव में स्ट्रीमिंग बाइनरी डेटा का समर्थन नहीं करता है, लेकिन फिर भी स्ट्रीमिंग विधियों का उपयोग करने के लिए कोई सराहनीय दंड नहीं है।