CodeGym/Java Course/All lectures for HI purposes/ResultSet के साथ उन्नत कार्य

ResultSet के साथ उन्नत कार्य

उपलब्ध

परिणामसेट अनुकूलन

आधुनिक जेडीबीसी एपीआई आपको वस्तुओं को अत्यधिक अनुकूलित करने की अनुमति देता है।कथनऔरपरिणाम सेट. उदाहरण के लिए, का उपयोग करनापरिणाम सेटआप डेटाबेस में पंक्तियों को बदल सकते हैं।

स्टेटमेंट ऑब्जेक्ट बनाते समय, हम इसमें अपनी इच्छाओं का एक गुच्छा पास कर सकते हैं। इन इच्छाओं को तीन समूहों में विभाजित किया जा सकता है:

  • आधार कनेक्शन प्रकार
  • समवर्ती अभिगम नियंत्रण
  • दृढ़ता और लेनदेन

ऑब्जेक्ट बनाते समय इन मापदंडों को पारित किया जा सकता हैकथनयातैयार बयान. उदाहरण:

Statement statement = connection.createStatement(
    ResultSet.TYPE_FORWARD_ONLY,
    ResultSet.CONCUR_READ_ONLY,
    ResultSet.CLOSE_CURSORS_OVER_COMMIT );

PreparedStatement statement = connection.prepareStatement(sql,
    ResultSet.TYPE_FORWARD_ONLY,
    ResultSet.CONCUR_READ_ONLY,
    ResultSet.CLOSE_CURSORS_OVER_COMMIT);

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

परिणामसेट प्रकार

परिणामसेट एक विशिष्ट प्रकार का हो सकता है। प्रकार परिणामसेट की कुछ विशेषताओं और क्षमताओं को परिभाषित करता है।

सभी प्रकार के सभी डेटाबेस और JDBC ड्राइवर समर्थित नहीं हैं। आपको यह देखने के लिए अपने डेटाबेस और JDBC ड्राइवर की जांच करनी होगी कि क्या यह उस प्रकार का समर्थन करता है जिसका आप उपयोग करना चाहते हैं। दिया गया प्रकार समर्थित है या नहीं, इसके आधार पर DatabaseMetaData.supportsResultSetType(int type) विधि सही या गलत लौटाती है ।

लेखन के समय, तीन प्रकार के परिणामसेट होते हैं:

  • परिणामसेट। TYPE_FORWARD_ONLY
  • परिणामसेट। TYPE_SCROLL_INSENSITIVE
  • परिणामसेट। TYPE_SCROLL_SENSITIVE

डिफ़ॉल्ट प्रकार TYPE_FORWARD_ONLY है।

TYPE_FORWARD_ONLY का अर्थ है कि परिणामसेट को केवल आगे बढ़ाया जा सकता है। यानी, आप केवल पंक्ति 1, पंक्ति 2, पंक्ति 3, आदि से आगे बढ़ सकते हैं। एक परिणामसेट में, आप पीछे नहीं जा सकते: आप दसवीं पढ़ने के बाद 9वीं पंक्ति से डेटा नहीं पढ़ सकते हैं।

TYPE_SCROLL_INSENSITIVE का अर्थ है कि ResultSet को आगे या पीछे ले जाया (स्क्रॉल) किया जा सकता है। आप वर्तमान स्थिति के सापेक्ष स्थिति में भी जा सकते हैं, या पूर्ण स्थिति में जा सकते हैं।

इस प्रकार का एक परिणामसेट अंतर्निहित डेटा स्रोत में परिवर्तनों के प्रति असंवेदनशील है, जबकि परिणामसेट खुला है। यही है, यदि किसी अन्य थ्रेड या प्रक्रिया द्वारा डेटाबेस में ResultSet में एक प्रविष्टि को बदल दिया गया है, तो यह पहले से खोले गए में परिलक्षित नहीं होगापरिणाम सेटइस प्रकार का।

TYPE_SCROLL_SENSITIVE का मतलब है कि ResultSet को आगे या पीछे ले जाया (स्क्रॉल) किया जा सकता है। आप वर्तमान स्थिति के सापेक्ष स्थिति में भी जा सकते हैं, या पूर्ण स्थिति में जा सकते हैं।

इस प्रकार का एक परिणामसेट अंतर्निहित डेटा स्रोत में परिवर्तन के प्रति संवेदनशील होता है, जबकि परिणामसेट खुला होता है। अर्थात्, यदि किसी अन्य थ्रेड या प्रक्रिया द्वारा डेटाबेस में ResultSet में एक प्रविष्टि को बदल दिया जाता है, तो यह पहले से ही खुले में परिलक्षित होगापरिणाम सेटइस प्रकार का।

संगामिति

रिजल्टसेट की संगामिति निर्धारित करती है कि क्या रिजल्टसेट को अपडेट किया जा सकता है या केवल पढ़ा जा सकता है।

कुछ डेटाबेस और JDBC ड्राइवर रिजल्टसेट को अपडेट करने का समर्थन करते हैं, लेकिन सभी नहीं। DatabaseMetaData.supportsResultSetConcurrency(int concurrency) मेथड सही या गलत देता है , जो इस बात पर निर्भर करता है कि दिया गया कॉन्करेंसी मोड समर्थित है या नहीं।

परिणामसेट में समवर्ती के दो स्तरों में से एक हो सकता है:

  • परिणामसेट.CONCUR_READ_ONLY
  • परिणामसेट.CONCUR_UPDATABLE

CONCUR_READ_ONLY का अर्थ है कि परिणामसेट को केवल पढ़ा जा सकता है।

CONCUR_UPDATABLE का अर्थ है कि ResultSet को पढ़ा और संशोधित किया जा सकता है।

डेटाबेस में डेटा बदलने का एक उदाहरण

इन मापदंडों के साथ, आप जनरेट किए गए स्टेटमेंट और उसके रिजल्टसेट को नियंत्रित कर सकते हैं।

उदाहरण के लिए, आप एक अद्यतन करने योग्य परिणामसेट बना सकते हैं और डेटाबेस को बदलने के लिए इसका उपयोग कर सकते हैं। स्टेटमेंट बनाते समय, निम्नलिखित शर्तों का पालन करना महत्वपूर्ण है:

  • केवल एक तालिका निर्दिष्ट है
  • शामिल हों या खंड द्वारा समूह शामिल नहीं है
  • क्वेरी कॉलम में एक प्राथमिक कुंजी होनी चाहिए

जब उपरोक्त शर्तें पूरी होती हैं, तो डेटाबेस में तालिका को अद्यतन करने के लिए अद्यतन परिणामसेट का उपयोग किया जा सकता है। स्टेटमेंट ऑब्जेक्ट बनाते समय, आपको निम्नलिखित पैरामीटर निर्दिष्ट करने होंगे:

Statement st = createStatement(Result.TYPE_SCROLL_INSENSITIVE, Result.CONCUR_UPDATABLE)

इस तरह के बयान को क्रियान्वित करने का नतीजा एक अद्यतन करने योग्य परिणाम सेट है। अपडेट विधि परिणामसेट कर्सर को उस पंक्ति पर ले जाना है जिसे आप अपडेट करना चाहते हैं और फिर अपडेटXXX () विधि को कॉल करें ।

UpdateXXX विधि getXXX() विधि के समान काम करती है । UpdateXXX () पद्धति के दो पैरामीटर हैं। पहला अपडेट किए जा रहे कॉलम की संख्या है, जो कॉलम का नाम या सीरियल नंबर हो सकता है। दूसरा वह डेटा है जिसे अपडेट करने की आवश्यकता है, और यह डेटा प्रकार XXX जैसा ही होना चाहिए।

वास्तव में डेटाबेस में पंक्ति को अद्यतन करने के लिए, आपको परिणामसेट कर्सर को परिवर्तित पंक्ति छोड़ने से पहले updateRow() विधि को कॉल करने की आवश्यकता है, अन्यथा परिवर्तन डेटाबेस में नहीं आएंगे।

आप तालिका में नई पंक्तियाँ भी जोड़ सकते हैं:

सबसे पहले आपको कर्सर को एक खाली लाइन पर ले जाने की जरूरत है। ऐसा करने के लिए, MoveToInsertRow() विधि को कॉल करें ।

फिर आपको इस पंक्ति को अपडेटXXX () विधि का उपयोग करके डेटा से भरना होगा ।

फिर आपको पंक्ति को आधार में जोड़ने के लिए inserterRow() विधि को कॉल करने की आवश्यकता है।

और अंत में, आपको MoveToCurrentRow() विधि को कॉल करके कर्सर वापस करने की आवश्यकता है ।

महत्वपूर्ण! विस्तारित विवरण के लिए सभी DBMS इन विकल्पों का समर्थन नहीं करते हैं। समस्याओं के मामले में, किसी विशेष DBMS का आधिकारिक दस्तावेज़ देखें।

टिप्पणियां
  • लोकप्रिय
  • नया
  • पुराना
टिप्पणी लिखने के लिए आपको साइन इन करना होगा
इस पेज पर अभी तक कोई टिप्पणियां नहीं हैं