CodeGym /Java Course /All lectures for MR purposes /बग्स हाताळणे

बग्स हाताळणे

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

अश्रू आणि वेदना

Java प्रोग्राम चालवताना त्रुटी येऊ शकतात. डेटाबेससह कार्य करताना, त्रुटी उद्भवतील . आपण त्यापैकी कोणते अंदाज लावू शकता आणि पुरेसे समाधान देऊ शकता हे सर्व आहे.

ही ओळ कार्यान्वित करताना त्रुटींचा पहिला मोठा गट तुमची वाट पाहत असेल:

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

आपण येथे काय अपेक्षा करू शकता?

त्रुटी 1. ड्रायव्हर सापडला नाही .

जर तुम्हाला "… साठी योग्य ड्रायव्हर सापडला नाही" अशी त्रुटी आढळल्यास , याचा अर्थ ड्रायव्हर मॅनेजर तुमच्या URL च्या मागे कोणत्या प्रकारचा DBMS आहे हे समजू शकत नाही. उदाहरणार्थ, तुम्ही jdbc:mysql ऐवजी jdbc_mysql: लिहिले:

त्रुटी 2. कनेक्शन त्रुटी .

तुम्ही यजमानाच्या नावात चूक केल्यास, तुम्हाला बहुधा “असे कोणतेही होस्ट ज्ञात नाही” किंवा “कम्युनिकेशन लिंक अयशस्वी” असा संदेश मिळेल.

त्रुटी 3. डेटाबेसचे नाव चुकीचे आहे .

जर तुम्ही डेटाबेसचे नाव चुकीचे लिहिले असेल किंवा ते अस्तित्वात नसलेल्या दुसऱ्या सर्व्हरशी कनेक्ट केले असेल, तर तुम्हाला “अज्ञात डेटाबेस 'सुपरशॉप3'” असा संदेश मिळेल .

त्रुटी 4. चुकीचे लॉगिन किंवा पासवर्ड .

जर तुम्ही डेटाबेस पासवर्ड विसरलात किंवा तो चुकीचा प्रविष्ट केला असेल, तर बहुधा तुम्हाला "वापरकर्ता 'रूट'@'लोकलहोस्ट'साठी प्रवेश नाकारला (पासवर्ड वापरून: होय)" असा संदेश प्राप्त होईल .

SQL अपवाद

तरीही बेसशी कनेक्शन स्थापित केले असल्यास, ते अधिक मनोरंजक असेल. डेटाबेससह कार्य करताना त्रुटी आढळल्यास, 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 टाकते:

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

त्रुटी उदाहरणे

सर्व्हर ऍप्लिकेशनच्या टप्प्यावर एखादी त्रुटी आढळल्यास, सामान्यत: ती फक्त लॉग केली जाऊ शकते आणि नंतर अधिक तपशीलवार हाताळली जाऊ शकते. परंतु प्रोग्रामरच्या संगणकावर अनुप्रयोग चालू असताना असे घडले असेल तर, आपल्याला याचे कारण काळजीपूर्वक तपासण्याची आवश्यकता आहे.

डेटाबेससह कार्य करताना त्रुटींचे दोन सर्वात मोठे वर्ग आहेत:

  • मजकूर त्रुटीची विनंती करा
  • ResultSet सह काम करताना त्रुटी

विनंती मजकूरातील त्रुटी खूप वेळा येऊ शकते. क्वेरी खूप लांब असू शकते, त्यात अनेक टेबल्स (जॉइन द्वारे जोडलेले) आणि सबक्वेरीज (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 ऑब्जेक्टची “वर्तमान पंक्ती” पहिल्या पंक्तीच्या आधी येते, तर तुमच्याकडे खालील कोड असेल:

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)

आम्ही त्रुटी काळजीपूर्वक पाहतो आणि विचार करतो. मग आपण गुगल करतो आणि काही उदाहरणे शोधतो आणि उपाय समजून घेण्याचा प्रयत्न करतो.

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