CodeGym/Java Course/All lectures for BN purposes/বাগ মোকাবেলা

বাগ মোকাবেলা

বিদ্যমান

কান্না আর যন্ত্রণা

একটি জাভা প্রোগ্রাম চালানোর সময় ত্রুটি ঘটতে পারে। ডাটাবেসের সাথে কাজ করার সময়, ত্রুটি ঘটবে । আপনি ভবিষ্যদ্বাণী করতে পারেন এবং একটি পর্যাপ্ত সমাধান অফার করতে পারেন সেগুলি সম্পর্কে সবই।

এই লাইনটি কার্যকর করার সময় ত্রুটির প্রথম বড় গ্রুপ আপনার জন্য অপেক্ষা করবে:

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

আপনি এখানে কি আশা করতে পারেন?

ত্রুটি 1. ড্রাইভার পাওয়া যায়নি

আপনি যদি "… এর জন্য উপযুক্ত ড্রাইভার খুঁজে পাওয়া যায় নি" ত্রুটিটি পান , তাহলে এর মানে হল যে DBMS আপনার URL এর পিছনে কি ধরনের DBMS রয়েছে তা DriverManager বুঝতে পারেনি। উদাহরণস্বরূপ, আপনি jdbc:mysql এর পরিবর্তে jdbc_mysql: লিখেছেন:

ত্রুটি 2. সংযোগ ত্রুটি

আপনি যদি হোস্টের নামে ভুল করেন, আপনি সম্ভবত "কোনও হোস্ট পরিচিত নয়" বা "যোগাযোগ লিঙ্ক ব্যর্থতা" এর মতো একটি বার্তা পাবেন।

ত্রুটি 3. ডাটাবেসের নামটি ভুল

আপনি যদি ডাটাবেসের নামের বানান ভুল করেন বা অন্য সার্ভারের সাথে সংযোগ করেন যেখানে এটি বিদ্যমান নেই, আপনি "অজানা ডাটাবেস 'supershop3'" এর মতো একটি বার্তা পাবেন ।

ত্রুটি 4. ভুল লগইন বা পাসওয়ার্ড

আপনি যদি ডাটাবেস পাসওয়ার্ড ভুলে গিয়ে থাকেন বা এটি ভুলভাবে প্রবেশ করেন, তাহলে সম্ভবত আপনি একটি বার্তা পাবেন যেমন "অ্যাক্সেস অস্বীকার করা হয়েছে ব্যবহারকারীর 'root'@'localhost' (পাসওয়ার্ড ব্যবহার করে: হ্যাঁ)"

SQL ব্যতিক্রম

তবুও যদি বেসের সাথে সংযোগটি প্রতিষ্ঠিত হয় তবে এটি আরও আকর্ষণীয় হবে। ডাটাবেসের সাথে কাজ করার সময় ত্রুটির ক্ষেত্রে, JDBC এর একটি বিশেষ ব্যতিক্রম রয়েছে - java.sql.SQLException । পাশাপাশি এর বেশ কয়েকটি জাত।

এই ব্যতিক্রমটির শুধুমাত্র একটি অতিরিক্ত পদ্ধতি রয়েছে (ব্যতিক্রম শ্রেণীর তুলনায়) - getSQLState() পদ্ধতি, যা এসকিউএল সার্ভারে যে স্ট্যাটাস কোড (স্ট্রিং) ফিরিয়ে দিয়েছে তা ফেরত দেয়। ত্রুটি হ্যান্ডলিং এই মত দেখায়:

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 লেনদেন রোলব্যাকের সময় ত্রুটি৷
এসকিউএল ওয়ার্নিং DBMS দ্বারা জারি করা সতর্কতা

ত্রুটি উদাহরণ

যদি সার্ভার অ্যাপ্লিকেশনের পর্যায়ে একটি ত্রুটি ঘটে থাকে, তবে সাধারণত এটি শুধুমাত্র লগ করা যেতে পারে এবং তারপরে আরও বিস্তারিতভাবে মোকাবেলা করা যেতে পারে। তবে প্রোগ্রামারের কম্পিউটারে অ্যাপ্লিকেশনটি চলাকালীন যদি এটি ঘটে থাকে তবে আপনাকে এর কারণটি সাবধানতার সাথে তদন্ত করতে হবে।

একটি ডাটাবেসের সাথে কাজ করার সময় দুটি বৃহত্তম শ্রেণী ত্রুটি রয়েছে:

  • টেক্সট ত্রুটি অনুরোধ
  • ResultSet এর সাথে কাজ করার সময় ত্রুটি

অনুরোধ টেক্সট একটি ত্রুটি খুব প্রায়ই ঘটতে পারে. ক্যোয়ারীটি অনেক দীর্ঘ হতে পারে, এতে বেশ কয়েকটি টেবিল (JOIN এর মাধ্যমে যুক্ত) এবং সাবকোয়ারি (SUBSELECT) থাকতে পারে। এই ধরনের অনুরোধে ত্রুটি খুঁজে পাওয়া সহজ নয়। উপরন্তু, অনুরোধ প্রায়ই অংশ থেকে একসঙ্গে glued হয়, তথ্য সেখানে যোগ করা হয়.

আপনার প্রথম যে ত্রুটিটি সম্পর্কে সচেতন হওয়া উচিত তা হল 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)

আমরা ত্রুটিটি মনোযোগ সহকারে দেখি এবং চিন্তা করি। তারপরে আমরা গুগল করি এবং কয়েকটি উদাহরণ খুঁজে বের করি এবং সমাধানটি বোঝার চেষ্টা করি।

মন্তব্য
  • জনপ্রিয়
  • নতুন
  • পুরানো
মন্তব্য লেখার জন্য তোমাকে অবশ্যই সাইন ইন করতে হবে
এই পাতায় এখনও কোনো মন্তব্য নেই