CodeGym/Java Course/All lectures for HI purposes/कीड़ों से निपटना

कीड़ों से निपटना

उपलब्ध

आंसू और दर्द

जावा प्रोग्राम चलाते समय त्रुटियाँ हो सकती हैं। डेटाबेस के साथ काम करते समय त्रुटियां होंगी । यह सब कुछ है कि आप उनमें से किसके बारे में भविष्यवाणी कर सकते हैं और एक पर्याप्त समाधान प्रदान कर सकते हैं।

इस लाइन को निष्पादित करते समय त्रुटियों का पहला बड़ा समूह आपकी प्रतीक्षा कर रहा होगा:

Connection connection  = DriverManager.getConnection("jdbc:mysql://localhost:3306/test",  "root", "secret");

आप यहां क्या उम्मीद कर सकते हैं?

त्रुटि 1. ड्राइवर नहीं मिला

यदि आपको "कोई उपयुक्त ड्राइवर नहीं मिला ..." त्रुटि मिलती है , तो इसका मतलब है कि DriverManager यह नहीं समझ सका कि आपके URL के पीछे किस प्रकार का DBMS है। उदाहरण के लिए, आपने jdbc_mysql लिखा: jdbc के बजाय: mysql:

त्रुटि 2। कनेक्शन त्रुटि

यदि आप होस्ट नाम में गलती करते हैं, तो आपको "ऐसा कोई होस्ट ज्ञात नहीं है" या "संचार लिंक विफलता" जैसा संदेश मिलने की संभावना है।

त्रुटि 3। डेटाबेस का नाम गलत है

यदि आपने डेटाबेस नाम की गलत वर्तनी की है या किसी अन्य सर्वर से कनेक्ट करते हैं जहां वह मौजूद नहीं है, तो आपको "अज्ञात डेटाबेस 'सुपरशॉप3'" जैसा संदेश मिलेगा ।

त्रुटि 4. गलत लॉगिन या पासवर्ड

यदि आप डेटाबेस पासवर्ड भूल गए हैं या इसे गलत तरीके से दर्ज किया है, तो सबसे अधिक संभावना है कि आपको "उपयोगकर्ता 'रूट' @ 'लोकलहोस्ट' (पासवर्ड का उपयोग करके: YES) के लिए प्रवेश निषेध" जैसा संदेश प्राप्त होगा ।

एसक्यूएल अपवाद

यदि आधार से कनेक्शन अभी भी स्थापित है, तो यह और अधिक दिलचस्प होगा। डेटाबेस के साथ काम करते समय त्रुटियों के मामले में, JDBC का एक विशेष अपवाद है - java.sql.SQLException । साथ ही इसकी कई किस्में।

इस अपवाद में केवल एक अतिरिक्त विधि है (अपवाद वर्ग की तुलना में) - getSQLState() विधि, जो स्थिति कोड (स्ट्रिंग) लौटाती है जिसे SQL सर्वर ने वापस कर दिया। त्रुटि प्रबंधन इस तरह दिखता है:

Connection connection  = DriverManager.getConnection("jdbc:mysql://localhost:3306/test",  "root", "secret");
try {
   int rowsCount = statement.executeUpdate("DELETE FROM ‘Unemployees’");
} catch (SQLException ex) {
  // If table doesn't exist
   if (ex.getSQLState().compareTo("X0Y32") != 0) {
  	throw ex;
  }
 } finally {
  connection.close();
 }

सैकड़ों त्रुटि कोड हैं। आप यहां पूरी सूची देख सकते हैं ।

लेकिन कभी-कभी त्रुटि कोड JDBC को त्रुटि को बेहतर ढंग से समझने में मदद करते हैं और फिर यह न केवल SQLException, बल्कि विशिष्ट SQLException को फेंकता है:

बैचअपडेट अपवाद समूह अनुरोध के दौरान त्रुटि
डेटा ट्रंकेशन अक्सर लंबे डेटा को छोटा करते समय होता है
SQLClientInfoException क्लाइंट पास किए गए पैरामीटर जो कनेक्शन पर सेट नहीं किए जा सकते हैं: कनेक्शन
SQLDataException डेटा में त्रुटि, विवरण DBMS के प्रकार पर निर्भर करता है
SQLException डेटाबेस एक्सेस एरर या अन्य सामान्य एरर
SQLFeatureNotSupportedException DBMS इस कार्यक्षमता का समर्थन नहीं करता है
SQLIntegrityConstraintViolationException SQLState ==22 के साथ सभी त्रुटियाँ
SQLInvalidAuthorizationSpecException पहुंच और/या प्राधिकरण त्रुटि
SQLNonTransientConnectionException SQLState == 08 के लिए सभी त्रुटियाँ
SQLRecoverableException एक त्रुटि है, लेकिन इसे एप्लिकेशन के हस्तक्षेप से ठीक किया जा सकता है
SQLSyntaxErrorException क्वेरी सिंटैक्स में त्रुटि
SQLटाइमआउटअपवाद अनुरोध में बहुत समय लगा
SQLTransactionRollbackException लेन-देन रोलबैक के दौरान त्रुटि
SQLचेतावनी डीबीएमएस ने जारी की चेतावनी

त्रुटि उदाहरण

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

डेटाबेस के साथ काम करते समय त्रुटियों के दो सबसे बड़े वर्ग होते हैं:

  • पाठ त्रुटि का अनुरोध करें
  • रिजल्टसेट के साथ काम करते समय त्रुटि

अनुरोध पाठ में त्रुटि बहुत बार हो सकती है। क्वेरी बहुत लंबी हो सकती है, इसमें कई टेबल (JOIN के माध्यम से शामिल) और सबक्वेरी (SUBSELECT) शामिल हैं। ऐसे अनुरोध में त्रुटि खोजना आसान नहीं है। इसके अलावा, अनुरोधों को अक्सर भागों से एक साथ चिपकाया जाता है, वहां डेटा जोड़ा जाता है।

सबसे पहली त्रुटि जिसके बारे में आपको अवगत होना चाहिए वह है SQLSyntaxErrorException । इस तरह की त्रुटि का आमतौर पर मतलब होता है कि आपके पास अनुरोध निकाय में एक टाइपो है।

आइए हमारा पसंदीदा उदाहरण लें:

ResultSet results = statement.executeQuery("SELECT Count(*) FROM user");
results.next();
    int count = results.getInt(1);

और "गलती से" अनुरोध निकाय में तारांकन हटाएं:

ResultSet results = statement.executeQuery("SELECT Count() FROM user");
results.next();
    int count = results.getInt(1);

तब हमें एक अपवाद मिलेगा:

Exception in thread "main" java.sql.SQLSyntaxErrorException:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') FROM task' at line 1

           	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)

SQL सर्वर हमें बताता है कि FROM से पहले एक सिंटैक्स त्रुटि हुई थी।

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

एक अन्य लोकप्रिय गलती है रिजल्टसेट के साथ गलत काम - अनुरोध का परिणाम। मान लीजिए कि आप डेटा पढ़ने से पहले भूल गए हैं कि ResultSet ऑब्जेक्ट की "वर्तमान पंक्ति" पहली पंक्ति से पहले आती है, तो आपके पास निम्न कोड होगा:

ResultSet results = statement.executeQuery("SELECT Count(*) FROM user");
//    results.next();
    int count = results.getInt(1);

आपको यह त्रुटि मिलेगी:


2012 12:55:48 AM jButton5ActionPerformed
SEVERE: null
java.sql.SQLException: Before start of result set
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
    at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:841)
    at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5650)
    at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5570)

हम त्रुटि को ध्यान से देखते हैं और सोचते हैं। फिर हम गूगल करते हैं और कुछ उदाहरण ढूंढते हैं और समाधान को समझने की कोशिश करते हैं।

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