CodeGym /Java Course /All lectures for MR purposes /डेटाबेससह कार्य करताना व्यवहार

डेटाबेससह कार्य करताना व्यवहार

All lectures for MR purposes
पातळी 1 , धडा 816
उपलब्ध

व्यवहार का आवश्यक आहेत

बर्‍याचदा, डेटाबेससह कार्य करताना, अशी परिस्थिती उद्भवते जेव्हा आपल्याला बर्‍याच भिन्न क्रिया करण्याची आवश्यकता असते, परंतु त्या केवळ एकत्रितपणे अर्थपूर्ण असतात.

उदाहरणार्थ, आम्ही बँकिंग सॉफ्टवेअर लिहित आहोत ज्याने तीन गोष्टी केल्या पाहिजेत:

  • ग्राहकाच्या खात्यातून पैसे काढा
  • प्राप्तकर्त्याच्या खात्यात पैसे जोडा
  • पोस्टिंग डेटा "पोस्टिंग लॉग" मध्ये रेकॉर्ड करा

यापैकी कोणत्याही कृतीच्या अंमलबजावणीदरम्यान त्रुटी आढळल्यास, इतर दोन देखील रद्द करणे आवश्यक आहे. क्लायंटकडून पैसे लिहून घेणे आणि प्राप्तकर्त्याला जोडणे अशक्य आहे? विहीर, किंवा प्राप्तकर्त्याला जोडा, परंतु क्लायंटकडून राइट ऑफ नाही?

तर, वेगवेगळ्या क्रियांच्या अशा तार्किक गटाला व्यवहार म्हणतात . दुस-या शब्दात, व्यवहार हा क्रियांचा एक समूह आहे जो फक्त सर्वांनी मिळून केला पाहिजे . कोणतीही कृती अयशस्वी झाल्यास किंवा त्रुटीसह अंमलात आणल्यास, इतर सर्व क्रिया रद्द केल्या पाहिजेत.

व्यवहारात सहसा तीन अवस्था असतात:

  • प्रारंभिक स्थिती - क्रियांचा समूह कार्यान्वित करण्यापूर्वी सिस्टमची स्थिती
  • यश राज्य - क्रिया गट पूर्ण झाल्यानंतर राज्य
  • अयशस्वी स्थिती - काहीतरी चूक झाली

या प्रकरणात, सहसा तीन आज्ञा असतात:

  • आरंभ/प्रारंभ - क्रियांचा तार्किक गट सुरू होण्यापूर्वी अंमलात आणला
  • कमिट - व्यवहार क्रिया गटानंतर अंमलात आणले
  • रोलबॅक - सिस्टमला अयशस्वी स्थितीपासून प्रारंभिक स्थितीकडे परत करण्याची प्रक्रिया सुरू करते

हे असे कार्य करते.

प्रथम तुम्हाला व्यवहार उघडण्याची आवश्यकता आहे - start() किंवा start() पद्धतीवर कॉल करा . या पद्धतीला कॉल करणे सिस्टमची स्थिती दर्शवते ज्यामध्ये काहीतरी चूक झाल्यास आम्ही परत जाण्याचा प्रयत्न करू.

मग सर्व क्रिया केल्या जातात, ज्या तार्किक गटात एकत्रित केल्या जातात - एक व्यवहार.

मग कमिट() पद्धत म्हणतात . त्याची कॉल क्रियांच्या तार्किक गटाच्या समाप्तीस चिन्हांकित करते आणि सामान्यतः या क्रिया प्रत्यक्षात आणण्याची प्रक्रिया देखील सुरू करते.

आम्ही फाइलराइटरमध्ये काहीतरी कसे लिहिले ते आठवा: प्रथम, आम्ही लिहिलेली प्रत्येक गोष्ट मेमरीमध्ये संग्रहित केली जाते आणि नंतर फ्लश () पद्धत कॉल केल्यावर , मेमरीमधील बफरमधील सर्व डेटा डिस्कवर लिहिला जातो. हा फ्लश() व्यवहार कमिट आहे.

ठीक आहे, जर व्यवहाराच्या ऑपरेशन दरम्यान एखादी त्रुटी आली असेल, तर तुम्हाला सुरुवातीच्या स्थितीत परत येण्याची प्रक्रिया सुरू करणे आवश्यक आहे. या प्रक्रियेला rollback() म्हणतात , आणि सामान्यतः त्याच नावाची पद्धत त्यासाठी जबाबदार असते.

साधारणपणे, व्यवहार पूर्ण करण्याचे 2 मार्ग आहेत:

  • कमिट - आम्ही केलेल्या सर्व बदलांची पुष्टी करतो
  • रोलबॅक - केलेले सर्व बदल परत करा

JDBC मध्ये व्यवहार

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

प्रथम, स्टेटमेंट ऑब्जेक्टच्या execute() पद्धतीचा प्रत्येक कॉल वेगळ्या व्यवहारात कार्यान्वित केला जातो. हे करण्यासाठी, कनेक्शनमध्ये एक AutoCommit पॅरामीटर आहे . जर ते true वर सेट केले असेल , तर प्रत्येक कॉलनंतर एक्झिक्युट() मेथडवर कमिट() कॉल केला जाईल .

दुसरे म्हणजे, जर तुम्हाला एका व्यवहारात अनेक कमांड्स कार्यान्वित करायच्या असतील तर तुम्ही ते याप्रमाणे करू शकता:

  • ऑटोकमिट अक्षम करा
  • आमच्या आदेशांना कॉल करत आहे
  • कमिट() पद्धतीला स्पष्टपणे कॉल करा

हे अगदी सोपे दिसते:

connection.setAutoCommit(false);

Statement statement = connection.createStatement();
int rowsCount1 = statement.executeUpdate("UPDATE  employee SET salary = salary+1000");
int rowsCount2 = statement.executeUpdate("UPDATE  employee SET salary = salary+1000");
int rowsCount3 = statement.executeUpdate("UPDATE  employee SET salary = salary+1000");

connection.commit();

कमिट() पद्धत चालू असताना सर्व्हरवर त्रुटी आढळल्यास , SQL सर्व्हर सर्व तीन क्रिया रद्द करेल.

परंतु अशी परिस्थिती असते जेव्हा क्लायंटच्या बाजूने त्रुटी उद्भवते आणि आम्ही कधीही कमिट() मेथड कॉलवर पोहोचलो नाही :

connection.setAutoCommit(false);

Statement statement = connection.createStatement();
int rowsCount1 = statement.executeUpdate("UPDATE  employee SET salary = salary+1000");
int rowsCount2 = statement.executeUpdate("UPDATE  employee SET salary = salary+1000");
int rowsCount3 = statement.executeUpdate("UPDATE multiple typos will result in an exception");

connection.commit();

एक executeUpdate() च्या अंमलबजावणीदरम्यान त्रुटी आढळल्यास , कमिट() पद्धत कॉल केली जाणार नाही. केलेल्या सर्व कृती परत करण्यासाठी, तुम्हाला rollback() पद्धत कॉल करणे आवश्यक आहे . हे सहसा असे दिसते:

try{
  	connection.setAutoCommit(false);

  	Statement statement = connection.createStatement();
  	int rowsCount1 = statement.executeUpdate("UPDATE  employee SET salary = salary+1000");
  	int rowsCount2 = statement.executeUpdate("UPDATE  employee SET salary = salary+1000");
  	int rowsCount3 = statement.executeUpdate("UPDATE multiple typos will result in an exception");

	  connection.commit();
 }
 catch (Exception e) {
   connection.rollback();
}

सेव्हपॉइंट्स

JDBC 3.0 च्या आगमनाने, व्यवहार रोलबॅकसह अधिक कार्यक्षमतेने कार्य करणे शक्य झाले. आता तुम्ही सेव्ह पॉइंट सेट करू शकता - पॉइंट सेव्ह करा आणि जेव्हा तुम्ही रोलबॅक () ऑपरेशनला कॉल करता , तेव्हा एका विशिष्ट सेव्ह पॉइंटवर परत जा.

सेव्ह करण्यासाठी, तुम्हाला सेव्हपॉईंट तयार करणे आवश्यक आहे, हे कमांडसह केले जाते:

Savepoint save = connection.setSavepoint();

सेव्हपॉईंटवर परत जाणे कमांडसह केले जाते:

connection.rollback(save);

आमच्या समस्याप्रधान कमांडच्या आधी सेव्हपॉईंट जोडण्याचा प्रयत्न करूया:

try{
  	connection.setAutoCommit(false);

  	Statement statement = connection.createStatement();
  	int rowsCount1 = statement.executeUpdate("UPDATE  employee SET salary = salary+1000");
  	int rowsCount2 = statement.executeUpdate("UPDATE  employee SET salary = salary+1000");

  	Savepoint save = connection.setSavepoint();
 	 try{
      	int rowsCount3 = statement.executeUpdate("UPDATE multiple typos will result in an exception");
 	 }
 	 catch (Exception e) {
    	   connection.rollback(save);
 	 }

	  connection.commit();
 }
 catch (Exception e) {
   connection.rollback();
}

आम्ही समस्याप्रधान पद्धतीला कॉल करण्यापूर्वी सेव्ह-पॉइंट जोडून नेस्टेड व्यवहार आयोजित केले आणि रोलबॅक(सेव्ह) पद्धतीला कॉल करून सेव्ह केलेल्या स्थितीत परतलो .

होय, हे गेममध्ये सेव्ह/लोड करण्यासारखेच आहे.

टिप्पण्या
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION