रिझल्ट सेट कस्टमायझेशन

आधुनिक JDBC API तुम्हाला मोठ्या प्रमाणात वस्तू सानुकूलित करण्याची परवानगी देते.विधानआणिपरिणाम सेट. उदाहरणार्थ, वापरणेपरिणाम सेटतुम्ही डेटाबेसमधील पंक्ती बदलू शकता.

स्टेटमेंट ऑब्जेक्ट तयार करताना, आपण त्यात आपल्या इच्छांचा एक समूह देऊ शकतो. या इच्छा तीन गटांमध्ये विभागल्या जाऊ शकतात:

  • बेस कनेक्शन प्रकार
  • समवर्ती प्रवेश नियंत्रण
  • चिकाटी आणि व्यवहार

ऑब्जेक्ट तयार करताना हे पॅरामीटर्स पास केले जाऊ शकतातविधानकिंवातयार विधान. उदाहरण:

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);

आम्ही या गोष्टींचा सखोल अभ्यास करणार नाही, परंतु मी तुम्हाला हे जाणून घेऊ इच्छितो की जर तुम्हाला दुसऱ्याच्या कोडमध्ये असे काहीतरी आढळले तर हे शक्य आहे.

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

ResultSet विशिष्ट प्रकारचा असू शकतो. प्रकार परिणाम सेटची काही वैशिष्ट्ये आणि क्षमता परिभाषित करतो.

सर्व प्रकार सर्व डेटाबेस आणि 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 म्हणजे निकाल सेट पुढे किंवा मागे हलविला जाऊ शकतो. तुम्ही सध्याच्या स्थितीशी संबंधित स्थानावर देखील जाऊ शकता किंवा निरपेक्ष स्थानावर जाऊ शकता.

रिझल्टसेट उघडे असताना या प्रकारचा रिझल्टसेट अंतर्निहित डेटा स्रोतातील बदलांसाठी असंवेदनशील असतो . म्हणजेच, जर रिझल्टसेटमधील एंट्री डेटाबेसमध्ये दुसर्‍या थ्रेड किंवा प्रक्रियेद्वारे बदलली असेल, तर ती आधीच उघडलेल्या मध्ये परावर्तित होणार नाही.परिणाम सेटया प्रकारच्या.

TYPE_SCROLL_SENSITIVE म्हणजे निकाल सेट पुढे किंवा मागे हलविला जाऊ शकतो (स्क्रोल केला जाऊ शकतो). तुम्ही सध्याच्या स्थितीशी संबंधित स्थानावर देखील जाऊ शकता किंवा निरपेक्ष स्थानावर जाऊ शकता.

रिझल्टसेट उघडे असताना या प्रकारचा रिझल्टसेट अंतर्निहित डेटा स्रोतातील बदलांसाठी संवेदनशील असतो . म्हणजेच, रिझल्टसेटमधील एंट्री डेटाबेसमध्ये दुसर्‍या थ्रेड किंवा प्रक्रियेद्वारे बदलली असल्यास, ती आधीच उघडलेल्या मध्ये प्रतिबिंबित होईलपरिणाम सेटया प्रकारच्या.

समरूपता

ResultSet ची concurrency हे ठरवते की ResultSet अपडेट केला जाऊ शकतो की फक्त वाचता येतो.

काही डेटाबेस आणि JDBC ड्रायव्हर्स ResultSet अपडेट करण्यास समर्थन देतात, परंतु सर्वच नाही. DatabaseMetaData.supportsResultSetConcurrency(int concurrency) पद्धत दिलेली concurrency मोड समर्थित आहे की नाही यावर अवलंबून सत्य किंवा असत्य परत करते .

ResultSet मध्ये दोन स्तरांपैकी एक समरूपता असू शकते:

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

CONCUR_READ_ONLY म्हणजे निकाल सेट फक्त वाचला जाऊ शकतो.

CONCUR_UPDATABLE म्हणजे निकालसंच वाचता आणि सुधारला जाऊ शकतो.

डेटाबेसमधील डेटा बदलण्याचे उदाहरण

या पॅरामीटर्ससह, तुम्ही व्युत्पन्न केलेले विधान आणि त्याचा परिणाम सेट नियंत्रित करू शकता.

उदाहरणार्थ, तुम्ही अपडेट करण्यायोग्य रिझल्टसेट तयार करू शकता आणि डेटाबेस बदलण्यासाठी त्याचा वापर करू शकता. विधान तयार करताना, खालील अटींचे पालन करणे महत्वाचे आहे:

  • फक्त एक टेबल निर्दिष्ट आहे
  • कलमांनुसार सामील होणे किंवा गट समाविष्ट नाही
  • क्वेरी स्तंभांमध्ये प्राथमिक की असणे आवश्यक आहे

वरील अटींची पूर्तता झाल्यावर, अपडेटेड रिझल्टसेट डेटाबेसमधील टेबल अपडेट करण्यासाठी वापरला जाऊ शकतो. स्टेटमेंट ऑब्जेक्ट तयार करताना, तुम्हाला खालील पॅरामीटर्स निर्दिष्ट करणे आवश्यक आहे:

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

असे विधान कार्यान्वित करण्याचा परिणाम हा अद्ययावत करण्यायोग्य निकाल संच आहे. अपडेट पद्धत म्हणजे ResultSet कर्सर तुम्हाला अपडेट करायच्या असलेल्या पंक्तीवर हलवणे आणि नंतर updateXXX() पद्धतीला कॉल करणे .

updateXXX पद्धत getXXX() पद्धतीप्रमाणेच कार्य करते . updateXXX() पद्धतीमध्ये दोन पॅरामीटर्स आहेत. प्रथम अद्यतनित होत असलेल्या स्तंभाची संख्या आहे, जी स्तंभाचे नाव किंवा अनुक्रमांक असू शकते. दुसरा डेटा आहे जो अद्यतनित करणे आवश्यक आहे आणि हा डेटा प्रकार XXX सारखाच असणे आवश्यक आहे.

डेटाबेसमधील पंक्ती प्रत्यक्षात अपडेट करण्यासाठी, रिझल्टसेट कर्सरने बदललेली पंक्ती सोडण्यापूर्वी तुम्हाला updateRow() पद्धतीला कॉल करणे आवश्यक आहे , अन्यथा बदल डेटाबेसमध्ये येणार नाहीत.

तुम्ही टेबलमध्ये नवीन पंक्ती देखील जोडू शकता:

प्रथम तुम्हाला कर्सर रिकाम्या ओळीवर हलवावा लागेल. हे करण्यासाठी, moveToInsertRow() पद्धतीला कॉल करा .

नंतर तुम्हाला ही पंक्ती updateXXX() पद्धत वापरून डेटाने भरायची आहे .

नंतर बेसमध्ये रो जोडण्यासाठी तुम्हाला inserterRow() पद्धत कॉल करणे आवश्यक आहे .

आणि शेवटी, तुम्हाला moveToCurrentRow() पद्धतीवर कॉल करून कर्सर परत करणे आवश्यक आहे .

महत्वाचे! सर्व DBMS विस्तारित विधानासाठी या पर्यायांना समर्थन देत नाहीत. समस्या असल्यास, विशिष्ट DBMS चे अधिकृत दस्तऐवजीकरण पहा.