కోడ్‌జిమ్/జావా కోర్సు/All lectures for TE purposes/దోషాలతో వ్యవహరించడం

దోషాలతో వ్యవహరించడం

అందుబాటులో ఉంది

కన్నీళ్లు మరియు నొప్పి

జావా ప్రోగ్రామ్‌ను అమలు చేస్తున్నప్పుడు లోపాలు సంభవించవచ్చు. డేటాబేస్తో పని చేస్తున్నప్పుడు, లోపాలు సంభవిస్తాయి . వాటిలో దేనిని మీరు అంచనా వేయగలరు మరియు తగిన పరిష్కారాన్ని అందించగలరు.

ఈ పంక్తిని అమలు చేస్తున్నప్పుడు దోషాల యొక్క మొదటి పెద్ద సమూహం మీ కోసం వేచి ఉంటుంది:

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

మీరు ఇక్కడ ఏమి ఆశించవచ్చు?

లోపం 1. డ్రైవర్ కనుగొనబడలేదు .

మీరు "దీనికి తగిన డ్రైవర్ కనుగొనబడలేదు ..." అనే లోపం వస్తే , మీ URL వెనుక ఏ రకమైన DBMS ఉందో DriverManager అర్థం చేసుకోలేకపోయిందని అర్థం. ఉదాహరణకు, మీరు jdbc_mysql: బదులుగా jdbc:mysql: అని వ్రాసారు.

లోపం 2. కనెక్షన్ లోపం .

మీరు హోస్ట్ పేరులో పొరపాటు చేస్తే, మీరు "అటువంటి హోస్ట్ ఏదీ తెలియదు" లేదా "కమ్యూనికేషన్స్ లింక్ వైఫల్యం" వంటి సందేశాన్ని అందుకుంటారు.

లోపం 3. డేటాబేస్ పేరు తప్పు .

మీరు డేటాబేస్ పేరును తప్పుగా వ్రాసినట్లయితే లేదా అది ఉనికిలో లేని మరొక సర్వర్‌కు కనెక్ట్ చేసినట్లయితే, మీరు "తెలియని డేటాబేస్ 'సూపర్‌షాప్3'" వంటి సందేశాన్ని పొందుతారు .

లోపం 4. తప్పు లాగిన్ లేదా పాస్‌వర్డ్ .

మీరు డేటాబేస్ పాస్‌వర్డ్‌ను మరచిపోయినా లేదా తప్పుగా నమోదు చేసినా, మీరు చాలా మటుకు "యూజర్ 'root'@'localhost' (పాస్‌వర్డ్ ఉపయోగించి: YES) కోసం యాక్సెస్ నిరాకరించబడింది" వంటి సందేశాన్ని అందుకుంటారు .

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ని కూడా విసురుతుంది:

బ్యాచ్‌అప్‌డేట్ మినహాయింపు సమూహ అభ్యర్థన సమయంలో లోపం
డేటా ట్రంకేషన్ సుదీర్ఘ డేటాను కత్తిరించేటప్పుడు తరచుగా సంభవిస్తుంది
SQLClientInfoException క్లయింట్ కనెక్షన్‌పై సెట్ చేయలేని పారామితులను ఆమోదించింది: కనెక్షన్
SQLData మినహాయింపు డేటాతో ఎర్రర్, వివరాలు DBMS రకాన్ని బట్టి ఉంటాయి
SQLEమినహాయింపు డేటాబేస్ యాక్సెస్ లోపం లేదా ఇతర సాధారణ లోపాలు
SQLFeatureNotSupportedException DBMS ఈ కార్యాచరణకు మద్దతు ఇవ్వదు
SQLIసమగ్రత నియంత్రణ ఉల్లంఘన మినహాయింపు SQLState ==22 కోసం అన్ని లోపాలు
SQLI చెల్లుబాటు అయ్యే ఆథరైజేషన్ స్పెక్ మినహాయింపు యాక్సెస్ మరియు/లేదా అధికార లోపం
SQLNonTransientConnectionException SQLState ==08 కోసం అన్ని లోపాలు
SQLRecoverable మినహాయింపు లోపం ఉంది, కానీ అప్లికేషన్ జోక్యంతో దాన్ని పరిష్కరించవచ్చు
SQLSyntaxErrorException ప్రశ్న సింటాక్స్‌లో లోపం
SQLTimeout మినహాయింపు అభ్యర్థన చాలా సమయం పట్టింది
SQLTransactionRollbackException లావాదేవీ రోల్‌బ్యాక్ సమయంలో లోపం
SQLహెచ్చరిక DBMS ద్వారా హెచ్చరిక జారీ చేయబడింది

తప్పు ఉదాహరణలు

సర్వర్ అప్లికేషన్ యొక్క దశలో లోపం సంభవించినట్లయితే, సాధారణంగా అది లాగిన్ చేయబడి, ఆపై మరింత వివరంగా పరిష్కరించబడుతుంది. ప్రోగ్రామర్ కంప్యూటర్‌లో అప్లికేషన్ నడుస్తున్నప్పుడు ఇది జరిగితే, మీరు దీనికి కారణాన్ని జాగ్రత్తగా పరిశోధించాలి.

డేటాబేస్తో పని చేస్తున్నప్పుడు రెండు అతిపెద్ద తరగతుల లోపాలు ఉన్నాయి:

  • అభ్యర్థన వచన లోపం
  • ResultSetతో పని చేస్తున్నప్పుడు లోపం

అభ్యర్థన వచనంలో లోపం చాలా తరచుగా సంభవించవచ్చు. ప్రశ్న చాలా పొడవుగా ఉండవచ్చు, అనేక పట్టికలు (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)

మేము లోపాన్ని జాగ్రత్తగా పరిశీలిస్తాము మరియు ఆలోచిస్తాము. అప్పుడు మేము గూగుల్ చేసి, కొన్ని ఉదాహరణలను కనుగొని, పరిష్కారాన్ని అర్థం చేసుకోవడానికి ప్రయత్నిస్తాము.

వ్యాఖ్యలు
  • జనాదరణ పొందినది
  • కొత్తది
  • పాతది
వ్యాఖ్యానించడానికి మీరు తప్పనిసరిగా సైన్ ఇన్ చేసి ఉండాలి
ఈ పేజీకి ఇంకా ఎలాంటి వ్యాఖ్యలు లేవు