CodeGym/Java Course/All lectures for TA purposes/பிழைகளைக் கையாள்வது

பிழைகளைக் கையாள்வது

கிடைக்கப்பெறுகிறது

கண்ணீர் மற்றும் வலி

ஜாவா நிரலை இயக்கும்போது பிழைகள் ஏற்படலாம். தரவுத்தளத்துடன் பணிபுரியும் போது, ​​பிழைகள் ஏற்படும் . அவற்றில் எது நீங்கள் கணித்து போதுமான தீர்வை வழங்க முடியும் என்பதைப் பற்றியது.

இந்த வரியை இயக்கும் போது பிழைகளின் முதல் பெரிய குழு உங்களுக்காக காத்திருக்கும்:

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

நீங்கள் இங்கே என்ன எதிர்பார்க்கலாம்?

பிழை 1. டிரைவர் கிடைக்கவில்லை .

“பொருத்தமான இயக்கி இல்லை…” என்ற பிழையை நீங்கள் பெற்றால் , உங்கள் URL க்கு பின்னால் எந்த வகையான DBMS உள்ளது என்பதை DriverManager புரிந்து கொள்ளவில்லை என்று அர்த்தம். எடுத்துக்காட்டாக, jdbc:mysql: என்பதற்குப் பதிலாக jdbc_mysql: என்று எழுதியுள்ளீர்கள்.

பிழை 2. இணைப்பு பிழை .

ஹோஸ்ட் பெயரில் நீங்கள் தவறு செய்தால், "அத்தகைய ஹோஸ்ட் எதுவும் தெரியவில்லை" அல்லது "தொடர்பு இணைப்பு தோல்வி" போன்ற செய்தியைப் பெறுவீர்கள்.

பிழை 3. தரவுத்தள பெயர் தவறானது .

தரவுத்தளத்தின் பெயரை தவறாக எழுதினால் அல்லது அது இல்லாத வேறொரு சேவையகத்துடன் இணைத்தால், "தெரியாத தரவுத்தள 'supershop3'" போன்ற செய்தியைப் பெறுவீர்கள் .

பிழை 4. தவறான உள்நுழைவு அல்லது கடவுச்சொல் .

நீங்கள் தரவுத்தள கடவுச்சொல்லை மறந்துவிட்டால் அல்லது அதை தவறாக உள்ளிட்டால், "'root'@'localhost' பயனருக்கு அணுகல் மறுக்கப்பட்டது (கடவுச்சொல்லைப் பயன்படுத்துதல்: ஆம்)" போன்ற செய்தியைப் பெறுவீர்கள் .

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 இணைப்பில் அமைக்க முடியாத அளவுருக்களை கிளையன்ட் அனுப்பியுள்ளார்: இணைப்பு
SQLData விதிவிலக்கு தரவு பிழை, விவரங்கள் DBMS வகையைப் பொறுத்தது
SQLEவிதிவிலக்கு தரவுத்தள அணுகல் பிழை அல்லது பிற பொதுவான பிழைகள்
SQLFeatureNotSupportedException DBMS இந்த செயல்பாட்டை ஆதரிக்கவில்லை
SQLIஒருமைப்பாடு கட்டுப்பாடு மீறல் விதிவிலக்கு SQLState ==22 இல் உள்ள அனைத்து பிழைகளும்
SQLசெல்லுபடியாத அங்கீகாரம் ஸ்பெக் விதிவிலக்கு அணுகல் மற்றும்/அல்லது அங்கீகார பிழை
SQLNonTransientConnectionException SQLState ==08 இல் உள்ள அனைத்து பிழைகளும்
SQLRecoverable விதிவிலக்கு பிழை உள்ளது, ஆனால் பயன்பாட்டின் தலையீட்டால் அதை சரிசெய்ய முடியும்
SQLSyntaxErrorException வினவல் தொடரியலில் பிழை
SQLTimeout விதிவிலக்கு கோரிக்கை அதிக நேரம் எடுத்தது
SQLTransactionRollback விதிவிலக்கு பரிவர்த்தனை திரும்பப்பெறும் போது பிழை
SQLஎச்சரிக்கை டிபிஎம்எஸ் வழங்கிய எச்சரிக்கை

பிழை உதாரணங்கள்

சேவையக பயன்பாட்டின் கட்டத்தில் பிழை ஏற்பட்டால், வழக்கமாக அதை பதிவுசெய்து பின்னர் இன்னும் விரிவாகக் கையாள முடியும். ஆனால் புரோகிராமரின் கணினியில் பயன்பாடு இயங்கும் போது இது நடந்தால், இதற்கான காரணத்தை நீங்கள் கவனமாக ஆராய வேண்டும்.

தரவுத்தளத்துடன் பணிபுரியும் போது இரண்டு பெரிய வகை பிழைகள் உள்ளன:

  • கோரிக்கை உரை பிழை
  • 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 பொருளின் "தற்போதைய வரிசை" முதல் வரிசைக்கு முன் வரும் என்பதை நீங்கள் மறந்துவிட்டீர்கள் என்று வைத்துக்கொள்வோம், பின்னர் உங்களிடம் பின்வரும் குறியீடு இருக்கும்:

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)

பிழையை கவனமாகப் பார்த்து சிந்திக்கிறோம். பிறகு கூகுள் செய்து ஓரிரு உதாரணங்களைக் கண்டுபிடித்து தீர்வைப் புரிந்துகொள்ள முயற்சிப்போம்.

கருத்துக்கள்
  • பிரபலமானவை
  • புதியவை
  • பழையவை
ஒரு கருத்தைத் தெரிவிக்க நீங்கள் உள்நுழைந்திருக்க வேண்டும்
இந்தப் பக்கத்தில் இதுவரை எந்தக் கருத்தும் வழங்கப்படவில்லை