jdbc exception handling how handle sql exceptions
सरणी का उपयोग करके c ++ में स्टैक कार्यान्वयन
यह JDBC अपवाद हैंडलिंग ट्यूटोरियल प्रोग्रामिंग उदाहरणों की मदद से SQL अपवादों को संभालने के तरीके बताता है:
में JDBC लेन-देन प्रबंधन का ट्यूटोरियल JDBC ट्यूटोरियल श्रृंखला , हमने JDBC लेनदेन प्रकार, डेटा प्रकार, लेनदेन प्रबंधन के तरीके और उन्हें जावा प्रोग्राम में कैसे उपयोग किया जाता है, सीखा।
इस ट्यूटोरियल में, हम JDBC में अपवादों के बारे में जानेंगे और उन्हें कैसे संभालेंगे। JDBC में, यदि डेटाबेस कनेक्टिविटी या DB से संबंधित किसी चीज़ के कारण अपवाद हुआ, तो यह SQLException के अंतर्गत आएगा। यहां, हम SQLException के बारे में अधिक जानकारी देखेंगे।
JDBC में अपवादों के बारे में जानने के लिए तैयार रहें।
आप क्या सीखेंगे:
JDBC अपवाद हैंडलिंग
अपवाद तब होते हैं जब प्रोग्राम के निष्पादन में कोई त्रुटि या चेतावनी होती है। जब कोई अपवाद होता है, तो कार्यक्रम का सामान्य प्रवाह गड़बड़ा जाएगा और कार्यक्रम असामान्य रूप से समाप्त हो जाएगा। अपवाद के बारे में अच्छी बात यह है कि हम इसे एक कोशिश-पकड़ ब्लॉक या थ्रो कीवर्ड का उपयोग करके संभाल सकते हैं। सभी अपवाद और त्रुटियां थ्रोएबल श्रेणी के उपवर्ग हैं। थ्रोबेबल क्लास सभी अपवादों और त्रुटियों का आधार वर्ग है।
जावा एक्सेप्शन हैंडलिंग कीवर्ड
जावा एक्सेप्शन हैंडलिंग में पाँच कीवर्ड हैं। वे इस प्रकार हैं:
- प्रयत्न: प्रोग्राम स्टेटमेंट जो अपवाद को उठा सकते हैं उन्हें एक कोशिश ब्लॉक के भीतर रखा जाना चाहिए।
- पकड़: यदि कोई अवरोधक ब्लॉक में होता है, तो उसे फेंक दिया जाएगा। हम कैच ब्लॉक का उपयोग करके उस अपवाद को पकड़ सकते हैं और इसे कोड में संभाल सकते हैं।
- फेंकना: सिस्टम जनरेट किए गए अपवाद स्वचालित रूप से JVM द्वारा फेंके गए हैं। अपवादों को मैन्युअल रूप से फेंकने के लिए, हमें एक कीवर्ड थ्रो का उपयोग करना चाहिए।
- फेंकता है: किसी भी अपवाद को एक विधि से बाहर फेंक दिया गया है जो एक थ्रो क्लॉज द्वारा निर्दिष्ट किया जाना चाहिए।
- आखिरकार: किसी भी प्रोग्राम स्टेटमेंट को कोशिश ब्लॉक के बाद निष्पादित किया जाना चाहिए जिसे अंततः ब्लॉक में रखा जाना चाहिए।
>> क्लिक करें यहां जावा में अपवाद के बारे में अधिक जानकारी के लिए।
SQLException
JDBC में, क्वेरी निष्पादित या निष्पादित करते समय हमें अपवाद मिल सकते हैं। डेटाबेस या ड्राइवर के कारण होने वाले अपवाद SQL अपवाद के अंतर्गत आते हैं। अपवाद हैंडलिंग का उपयोग करते हुए, हम SQL अपवाद को संभाल सकते हैं जैसे हम सामान्य अपवाद को संभालते हैं।
SQLException java.sql पैकेज में उपलब्ध है। यह एक्सेप्शन क्लास का विस्तार करता है जिसका मतलब है कि हम एसक्यूएलएक्ससेप्शन क्लास में मौजूद एक्सेप्शन क्लास में भी उपलब्ध तरीकों का इस्तेमाल कर सकते हैं।
SQL अपवाद के लिए उदाहरण
SQL कथन में सिंटैक्स त्रुटि SQL अपवाद हो सकता है। जब ऐसा अपवाद होता है, तो SQLException वर्ग का एक ऑब्जेक्ट कैच ब्लॉक में पास किया जाएगा। SQLException ऑब्जेक्ट में जानकारी का उपयोग करके, हम उस अपवाद को पकड़ सकते हैं और कार्यक्रम जारी रख सकते हैं।
SQLException ऑब्जेक्ट में निम्न विधियाँ हैं:
विधि का नाम | विवरण |
---|---|
getErrorCode () | यह त्रुटि संख्या देता है |
getMessage () | यह त्रुटि संदेश देता है |
getSQLState () | यह SQLException ऑब्जेक्ट के SQLState को लौटाता है। यह अशक्त रूप में भी वापस आ सकता है। डेटाबेस त्रुटि के लिए, यह XOPEN SQL स्टेट लौटाएगा |
getNextException () | यह अपवाद श्रृंखला में अगला अपवाद देता है। |
PrintStackTrace () | यह वर्तमान अपवाद और मानक त्रुटि स्ट्रीम में इसके बैकट्रेस को प्रिंट करता है |
setNextException (SQLEXception ex) | इसका उपयोग श्रृंखला में एक और SQL अपवाद जोड़ने के लिए किया जाता है |
अपवादों को कैसे संभालें
JDBC से संबंधित अपवाद ज्यादातर SQLException को फेंकता है, और यह एक जाँच अपवाद है, इसलिए हमें इसे पकड़ना चाहिए या इसे फेंकना चाहिए। सभी व्यावसायिक तर्क और प्रतिबद्ध डेटा एक कोशिश ब्लॉक में किया जाना चाहिए, अगर ब्लॉक में कोई अपवाद हुआ तो हमें इसे पकड़ने और इसे पकड़ने ब्लॉक में संभालना चाहिए। अपवाद प्रकार के आधार पर, हमें रोलबैक करना चाहिए या कैच ब्लॉक में प्रतिबद्ध होना चाहिए।
SQLException की श्रेणियाँ
कभी-कभी JDBC ड्राइवर SQLException के उपवर्ग को फेंक सकता है जो एक सामान्य SQL राज्य या एक सामान्य त्रुटि स्थिति का प्रतिनिधित्व करता है जो विशेष रूप से किसी विशेष SQL राज्य वर्ग मान से संबद्ध नहीं होता है। यह आपको अपवाद को अधिक विशिष्ट तरीके से संभालने देगा, और हम इसे अपने कोड में संभाल सकते हैं। इस प्रकार के अपवाद निम्नलिखित अपवादों में से एक के उपवर्गों के अंतर्गत आते हैं:
- SQLNonTransientException: इस तरह के अपवाद को तब फेंक दिया जाएगा जब एक उदाहरण जहां एक ही ऑपरेशन की पुनरावृत्ति विफल हो जाएगी जब तक कि SQLException के कारण को ठीक नहीं किया गया हो।
- SQLTransientException: इस प्रकार के अपवाद को तब फेंक दिया जाएगा जब पहले से विफल ऑपरेशन तब सफल हो पाता है जब हम फिर से बिना किसी बदलाव / हस्तक्षेप के ऑपरेशन को दोबारा आज़माते हैं।
- SQLRecoverableException: इस प्रकार के अपवाद को तब फेंक दिया जाएगा जब एक पूर्व में विफल ऑपरेशन सफल हो सकता है जब हमने एप्लिकेशन द्वारा किसी भी परिवर्तन / हस्तक्षेप के साथ फिर से ऑपरेशन की दोबारा कोशिश की। यह करते समय कि वर्तमान कनेक्शन बंद होना चाहिए और नया कनेक्शन खोला जाना चाहिए।
SQLException के अन्य उपवर्ग:
निम्नलिखित SQLException के उपवर्ग हैं:
- BatchUpdateException: यदि बैच अद्यतन कार्रवाई करते समय कोई त्रुटि हुई है, तो इस प्रकार के अपवाद को फेंक दिया जाएगा। SQLException जानकारी के अलावा, BatchUpdateException उन स्टेटस की स्थिति प्रदान करती है जिन्हें त्रुटि होने से पहले निष्पादित / अपडेट किया गया है।
- SQLClientInfoException: इस प्रकार के अपवाद को फेंक दिया जाएगा यदि एक या एक से अधिक सूचना गुण कनेक्शन पर सेट नहीं किए जा सकते। SQLException जानकारी के अलावा, SQLClientInfoException क्लाइंट सूचना गुणों की एक सूची जो सेट नहीं की गई थी।
इस ट्यूटोरियल में, हम सामान्य SQLException देखेंगे, और फिर हम BatchUpdateException देखेंगे। आप अपने सिस्टम पर SQLException के शेष उपवर्गों का प्रयोग कर सकते हैं।
निम्नलिखित उदाहरण में, हम इस बात पर विस्तार से बताएंगे कि अपवाद को कैसे संभालना है।
इस ट्यूटोरियल में सभी प्रोग्राम जावा में लिखे गए हैं। हमने जावा 8 संस्करण और ओरेकल डीबी का उपयोग किया है।
>> क्लिक करें यहां Oracle सॉफ्टवेयर डाउनलोड करने के लिए
>> क्लिक करें यहां जावा संस्करण 8 डाउनलोड करने के लिए
इसमें चरण-दर-चरण जावा स्थापना प्रक्रिया है।
अपवाद उदाहरण कार्यक्रम
package com.STH.JDBC; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Exception_Example { public static void main(String() args) throws ClassNotFoundException { // TODO Auto-generated method stub String update_query = 'update employee_details set email='martinL@gmail.com' where empNum1 = 10011'; //Update query to set the email id for the employee whose empNUM is 10011 Class.forName('oracle.jdbc.driver.OracleDriver'); try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); ResultSet rs1 =null; statemnt1 = conn.createStatement(); System.out.println('Executing Update query using executeUpdate method'); int return_rows = statemnt1.executeUpdate(update_query); System.out.println('No. of Affected Rows = '+ return_rows); } catch(SQLException sqe) { System.out.println('Error Code = ' + sqe.getErrorCode()); System.out.println('SQL state = ' + sqe.getSQLState()); System.out.println('Message = ' + sqe.getMessage()); System.out.println('printTrace /n'); sqe.printStackTrace(); } } }
आउटपुट:
स्पष्टीकरण:
# 1) एक चयनित क्वेरी बनाई गई जिसमें स्तंभ का नाम है जो EMPLOYEE_DET Colors तालिका में नहीं है।
क्वेरी बनाएँ:
String update_query = 'update employee_details set email='martinL@gmail.com' where empNum1 = 10011';
#दो) कनेक्शन, कथन बनाया, और कोशिश ब्लॉक में चयन करें निष्पादित किया।
# 3) कैच ब्लॉक में, हमने अपवाद को संभाला।
# 4) हम getError () पद्धति का उपयोग करते हुए अपवाद की त्रुटि प्रदर्शित कर रहे हैं, getSQLState () विधि का उपयोग करते हुए अपवाद का SQLState, getMessage () विधि का उपयोग करके अपवाद का संदेश, और PrintStackTrace विधि का उपयोग करके अपवाद के स्टैक ट्रेस को प्रिंट करें।
BatchUpdateException उदाहरण
हमने बैचअपडेट उदाहरण की व्याख्या करने के लिए एक नई तालिका बनाई है। तालिका का नाम EMPLOYEE है। इसके 3 कॉलम हैं।
वे:
- आईडी जो एक प्राथमिक कुंजी है
- उपनाम
- संतोष
ORACLE DB में एक तालिका बनाने के लिए सिंटैक्स:
CREATE TABLE EMPLOYEE ( ID int NOT NULL PRIMARY KEY, LastName varchar(255), FirstName varchar(255) );
जावा प्रोग्राम:
package com.STH.JDBC; import java.sql.BatchUpdateException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Statement_ExecuteBatch_Example { public static void main(String() args) throws ClassNotFoundException, SQLException { //Inserting the following 3 rows in EMPLOYEE_DETAILS Table String insert_query1 = 'insert into employee values(101,'Patterson','Tony')'; String insert_query2 = 'insert into employee values(102,'Potter','Harry')'; String insert_query3 = 'insert into employee values(102,'Wong','Jane')'; Class.forName('oracle.jdbc.driver.OracleDriver'); //Opening Oracle DB Connection try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); //Adding the 3 insert queries into the Statement object using addBatch method statemnt1.addBatch(insert_query1); statemnt1.addBatch(insert_query2); statemnt1.addBatch(insert_query3); int No_of_Afffected_Rows()= statemnt1.executeBatch(); //After inserting the data System.out.println('No of rows affected = ' +No_of_Afffected_Rows.length); } //Catching the BatchUpdateException catch(BatchUpdateException be) { //getting the updated rows status before the exception has occurred int() updateCount = be.getUpdateCounts(); int count = 1; for (int i : updateCount) { //Using for loop, printing the statement which has been successfully executed if (i == Statement.EXECUTE_FAILED) { System.out.println('Error on Statement ' + count +': Execution failed'); } else { System.out.println('Statement ' + count +': is executed'); } count++; //Incrementing the count to display the next updated row no. } //System.out.println('Error on statemet '+be.getUpdateCounts()); be.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } }
OUTPUT:
स्पष्टीकरण:
उपरोक्त कार्यक्रम में हमने जो किया है, हमने 3 INSERT प्रश्नों को बनाया है और इसे एक बैच में जोड़ा है और इसे निष्पादित किया है। ३तृतीयक्वेरी का समान आईडी मान 1 हैअनुसूचित जनजातिक्वेरी चूंकि ID स्तंभ EMPLOYEE तालिका की एक प्राथमिक कुंजी है, इसलिए प्रोग्राम ने एक BatchUpdateException को फेंक दिया है।
- EMPLOYEE तालिका में सम्मिलित करने के लिए 3 इंसर्ट प्रश्नों को बनाया। पहली और तीसरी क्वेरी में समान आईडी मान है। आईडी कॉलम EMPLOYEE तालिका की एक प्राथमिक कुंजी है।
- बनाया गया कथन ऑब्जेक्ट और इन 3 प्रश्नों को ऐड-बैच () विधि का उपयोग करके इसमें जोड़ा गया है। फिर इसे निष्पादित करने के लिए executeBatch () विधि कहा जाता है।
- चूंकि पहली और तीसरी क्वेरी में समान आईडी मान है। जब executeBatch () तीसरी क्वेरी को निष्पादित करने की कोशिश करता है तो वह बैचअपडेटटैप्शन को फेंक देगा।
- BatchUpdateException कैच ब्लॉक में, हमने अद्यतन पंक्ति की स्थिति प्राप्त करने के लिए getUpdateCounts () विधि को कॉल किया।
- लूप का उपयोग करते हुए, हम एक-एक करके जांच कर रहे हैं कि क्या किसी विशेष स्टेटमेंट की स्थिति विफल है या नहीं। यदि विशेष विवरण विफल नहीं है, तो यह कथन की पंक्ति संख्या को प्रिंट करेगा।
- उसके बाद, यह BatchUpdateException का PrintStackTrace प्रिंट करेगा।
- उपरोक्त उदाहरण में, चूंकि तीसरे बयान के कारण अपवाद हुआ, इसलिए कथन 1 और 2 मुद्रित किया गया है। फिर अपवाद का पूरा ट्रेस आउटपुट कंसोल में मुद्रित किया गया है।
याद दिलाने के संकेत:
- डेटाबेस के कारण होने वाला अपवाद SQLException के अंतर्गत आएगा।
- जावा में अपवादों को कोशिश: कैच ब्लॉक का उपयोग करके संभाला जा सकता है।
- SQLException चेक किया गया अपवाद है इसलिए हम इसे आज़मा कर देख सकते हैं: ब्लॉक को पकड़ें।
- हमारे पास SQLException के कुछ उपवर्ग हैं। वे SQLNonTransientException, SQLTransientException, SQLRecoverableException, BatchUpdateException और SQLClientInfoException हैं।
बार बार पूछे जाने वाले प्रश्न
Q # 1) SQL एक्सेप्शन क्या है?
उत्तर: डेटाबेस के कारण अपवाद अपवाद SQL अपवाद के रूप में जाना जाता है। एक अपवाद जो डेटाबेस से संबंधित जानकारी प्रदान करता है, उसे SQL अपवाद के रूप में भी जाना जाता है। हमारे पास जावा में एक SQLException वर्ग है, जिसका उपयोग अपवाद के बारे में जानकारी प्रदान करने के लिए किया जाता है। इसकी निम्नलिखित विधियाँ हैं:
- getErrorCode ()
- getMessage ()
- getSQLState ()
- PrintStackTrace ()
- getNextException ()
Q # 2) SQL में अपवाद को कैसे संभालना है?
उत्तर: कोशिश ब्लॉक में व्यावसायिक तर्क लिखें। अगर इसमें कोई त्रुटि या अपवाद हुआ है, तो इसे कैच ब्लॉक में पकड़ें और आसानी से अपवाद को खोजने के लिए उचित संदेश लिखें।
अपवाद को संभालने के लिए ट्राइ-कैच ब्लॉक का उपयोग किया जाता है।
Q # 3) जावा में SQLException कब हो सकती है?
उत्तर: SQLException तब होती है जब डेटाबेस एक्सेस या डेटाबेस से संबंधित अन्य त्रुटियों में कोई त्रुटि होती है। जब SQLException होती है, तो SQLException के प्रकार का एक ऑब्जेक्ट कैच क्लॉज को पास किया जाएगा। हम इसे कैच ब्लॉक में संभाल सकते हैं।
Q # 4) जावा में अपवाद श्रृंखला क्या है और इसका उपयोग क्या है?
उत्तर: एक अपवाद जो दूसरे अपवाद का कारण बनता है, उसे अपवाद श्रृंखला या जंजीर अपवाद के रूप में जाना जाता है। अधिकांश मामलों में हमें अपवाद को श्रृंखलाबद्ध करने की आवश्यकता होती है जैसे कि एक अपवाद को दूसरे अपवाद से संबंधित करते हैं, यह लॉग को स्पष्ट और आसान ट्रैकिंग बना देगा। यह डिबगिंग प्रक्रिया में प्रोग्रामर के लिए सहायक होगा।
उदाहरण के लिए:
एक विधि पर विचार करें जो शून्य से विभाजित होने के कारण एक अंकगणितीय अपवाद फेंकता है। अपवाद का वास्तविक कारण I / O त्रुटि है, जो भाजक को शून्य बनाता है। विधि केवल प्रोग्रामर के लिए एक अंकगणितीय अपवाद फेंक देगी। ताकि कॉल करने वाले / प्रोग्रामर को एक्सेप्शन के वास्तविक कारण के बारे में पता न चले। इस प्रकार की स्थिति में, हम एक जंजीर अपवाद का उपयोग कर सकते हैं।
निष्कर्ष
अपवादों को ट्राइ-कैच ब्लॉक का उपयोग करके या फेंककर नियंत्रित किया जा सकता है। डेटाबेस के कारण होने वाले अपवादों को SQLException के रूप में जाना जाता है। हमारे पास SQLException के लिए एक अलग वर्ग है जो अपवाद का एक उपवर्ग है। हमारे पास एसक्यूएल अपवाद के बारे में जानने के लिए और अधिक विशिष्ट तरीके हैं।
तरीके हैं getMessage (), getErrorCode (), getSQLState (), getNextException और PrintStackTace। getNextException Exception Chained मामले में उपयोग किया जाएगा।
अनुशंसित पाठ
- उदाहरणों के साथ जावा अपवाद और अपवाद हैंडलिंग
- शीर्ष 10 सेलेनियम अपवाद और इनसे कैसे निपटें (सटीक कोड)
- उदाहरणों के साथ PL SQL एक्सेप्शन हैंडलिंग के लिए पूरी गाइड
- कोड उदाहरणों के साथ C # अपवाद हैंडलिंग ट्यूटोरियल
- C ++ में अपवाद हैंडलिंग
- SoapUI Groovy लिपियों में अपवाद को कैसे हैंडल करें - SoapUI Tutorial # 11
- पीएल SQL ट्यूटोरियल उदाहरण के साथ शुरुआती के लिए | पीएल / एसक्यूएल क्या है
- PL SQL पैकेज: Oracle PL / SQL पैकेज ट्यूटोरियल उदाहरण के साथ