Java Technologies JDBC তে Transaction Management এর ধারণা গাইড ও নোট

250

Transaction Management হল ডেটাবেসে এক বা একাধিক অপারেশন সম্পাদন করার একটি প্রক্রিয়া যা একত্রিতভাবে কাজ করে এবং সঠিকভাবে সম্পন্ন হওয়ার জন্য কিছু শর্ত পালন করতে হয়। JDBC (Java Database Connectivity)-তে, Transaction Management ডেটাবেস অপারেশনগুলোর এককতা এবং নির্ভরযোগ্যতা নিশ্চিত করার জন্য ব্যবহৃত হয়। এটি ডেটাবেসে করা যেকোনো পরিবর্তনকে একত্রিতভাবে পরিচালনা করতে সহায়তা করে, যেন যদি কোন একটি অপারেশন ব্যর্থ হয় তবে সমস্ত পরিবর্তন প্রত্যাহার (rollback) করা যায় এবং ডেটাবেস অপরিবর্তিত থাকে।

JDBC-তে ট্রানজেকশন ব্যবস্থাপনা মূলত commit, rollback, এবং savepoint এর মাধ্যমে পরিচালিত হয়।


1. Transaction Management এর মূল ধারণা

একটি ট্রানজেকশন হল ডেটাবেসের উপর একাধিক অপারেশন (যেমন INSERT, UPDATE, DELETE) সমন্বিতভাবে সম্পাদিত একটি কার্যক্রম। ট্রানজেকশনটি সফল হলে সেটি commit করা হয়, অন্যথায় একটি ভুল ঘটলে rollback করা হয় যাতে পূর্বের অবস্থা পুনরুদ্ধার হয়।

Transaction Management এর মৌলিক শর্তগুলো হল:

  1. Atomicity: ট্রানজেকশনটির সমস্ত অপারেশন একত্রিতভাবে সম্পাদিত হয়, অর্থাৎ, সমস্ত অপারেশন সফল হলে সেটি commit হয়, আর কোন অপারেশন ব্যর্থ হলে পুরো ট্রানজেকশনটি rollback হয়ে যাবে।
  2. Consistency: ডেটাবেসের ইনটিগ্রিটি এবং স্ট্রাকচার সঠিক থাকে। ট্রানজেকশনটি ডেটাবেসকে একটি নির্ভরযোগ্য অবস্থা থেকে অন্য একটি নির্ভরযোগ্য অবস্থায় নিয়ে আসে।
  3. Isolation: একটি ট্রানজেকশন চলাকালীন অন্য কোন ট্রানজেকশন সেই ডেটাকে অ্যাক্সেস বা পরিবর্তন করতে পারে না।
  4. Durability: একবার commit হয়ে গেলে, সেই পরিবর্তনটি স্থায়ী হয় এবং সিস্টেম ক্র্যাশ হলেও তা হারায় না।

2. JDBC তে Transaction Management

JDBC তে ট্রানজেকশন ব্যবস্থাপনা পরিচালনা করার জন্য, কিছু সাধারণ পদ্ধতি রয়েছে:

  1. Autocommit Mode: ডিফল্টভাবে JDBC চালু থাকে autocommit মোডে, যেখানে প্রতি SQL কমান্ড (যেমন INSERT, UPDATE, DELETE) ডেটাবেসে স্বয়ংক্রিয়ভাবে commit হয়ে যায়।
  2. Manual Commit and Rollback: যখন আপনি ডেটাবেস ট্রানজেকশন ম্যানেজমেন্ট হাতে নিয়েছেন, তখন autocommit মোড বন্ধ করে নিজে commit এবং rollback পরিচালনা করতে হয়।

2.1 Autocommit Mode

JDBC এর ডিফল্ট মোড হল autocommit, যেখানে প্রতি SQL কিউরি সফলভাবে রান হওয়ার পরে তা স্বয়ংক্রিয়ভাবে commit হয়ে যায়। এর মানে হল, যে কোনও পরিবর্তন ডেটাবেসে স্বাভাবিকভাবেই কার্যকর হবে।

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "user", "password");

// By default, autocommit is enabled
// Any statement executed will be immediately committed to the database

এটি ছোট ও সহজ ট্রানজেকশনের জন্য ভাল হতে পারে, তবে বড় এবং কমপ্লেক্স ট্রানজেকশনের জন্য এটি অনুপযুক্ত হতে পারে, কারণ সমস্ত কিউরি একে একে commit হয়ে যায়, এবং একাধিক অপারেশন একত্রিতভাবে ট্রানজেকশন হিসেবে পরিচালিত হতে পারে না।


2.2 Manual Commit and Rollback

Autocommit বন্ধ করে আমরা ম্যানুয়ালি ট্রানজেকশন পরিচালনা করতে পারি। এটি তখন প্রয়োজনীয় যখন একাধিক SQL কুইরি একযোগে চালাতে চাই, এবং সফলভাবে সম্পন্ন হলে commit করতে চাই বা কোনো ত্রুটি ঘটলে rollback করতে চাই।

উদাহরণ:

import java.sql.*;

public class JDBCTransactionExample {
    public static void main(String[] args) {
        Connection connection = null;
        Statement statement = null;
        
        try {
            // ১. ডেটাবেসের সাথে সংযোগ স্থাপন
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");

            // ২. Autocommit বন্ধ করা
            connection.setAutoCommit(false);

            // ৩. SQL স্টেটমেন্ট তৈরি করা
            statement = connection.createStatement();

            // ৪. SQL কুইরি চালানো (এখানে দুটি ট্রানজেকশন অপারেশন)
            String query1 = "INSERT INTO users (id, name) VALUES (1, 'John')";
            String query2 = "INSERT INTO users (id, name) VALUES (2, 'Jane')";
            
            statement.executeUpdate(query1);
            statement.executeUpdate(query2);

            // ৫. commit করা, অর্থাৎ সকল অপারেশন সফল হলে পরিবর্তনগুলি ডেটাবেসে সেভ হবে
            connection.commit();
            System.out.println("Transaction committed successfully!");
            
        } catch (SQLException e) {
            try {
                // ৬. যদি কোনো ত্রুটি ঘটে তবে rollback করা
                if (connection != null) {
                    connection.rollback();
                    System.out.println("Transaction rolled back due to error.");
                }
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        } finally {
            try {
                // ৭. সংযোগ বন্ধ করা
                if (statement != null) statement.close();
                if (connection != null) connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

কোড ব্যাখ্যা:

  1. Autocommit বন্ধ করা: connection.setAutoCommit(false) মেথড ব্যবহার করে autocommit বন্ধ করা হয়।
  2. SQL কুইরি চালানো: দুটি executeUpdate() মেথড দ্বারা SQL কুইরি চালানো হয়।
  3. Commit: যদি সমস্ত কুইরি সফলভাবে রান হয়, তাহলে connection.commit() মেথড ব্যবহার করে সমস্ত পরিবর্তন ডেটাবেসে সেভ করা হয়।
  4. Rollback: যদি কোনো ত্রুটি ঘটে, তবে connection.rollback() মেথড দ্বারা সমস্ত পরিবর্তন পূর্বাবস্থায় ফিরে আসে।

3. Savepoints (সেভপয়েন্ট)

JDBC-এ savepoint একটি স্থান নির্দেশ করে যেখানে ট্রানজেকশনটি অংশীকভাবে রোলব্যাক করা যেতে পারে। এটি তখন ব্যবহৃত হয় যখন আপনি একটি বড় ট্রানজেকশনটি একাধিক ছোট অংশে ভাগ করতে চান এবং শুধুমাত্র নির্দিষ্ট অংশ রোলব্যাক করতে চান।

উদাহরণ:

import java.sql.*;

public class SavepointExample {
    public static void main(String[] args) {
        Connection connection = null;
        Statement statement = null;
        Savepoint savepoint = null;
        
        try {
            // ১. ডেটাবেসের সাথে সংযোগ স্থাপন
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");

            // ২. Autocommit বন্ধ করা
            connection.setAutoCommit(false);

            // ৩. SQL স্টেটমেন্ট তৈরি করা
            statement = connection.createStatement();

            // ৪. SQL কুইরি চালানো
            statement.executeUpdate("INSERT INTO users (id, name) VALUES (1, 'John')");
            
            // ৫. সেভপয়েন্ট তৈরি করা
            savepoint = connection.setSavepoint("Savepoint1");

            // ৬. আরো কিছু SQL কুইরি চালানো
            statement.executeUpdate("INSERT INTO users (id, name) VALUES (2, 'Jane')");

            // ৭. Rollback to Savepoint
            connection.rollback(savepoint); // যদি ত্রুটি হয়, শুধু সেভপয়েন্টের পরে পরিবর্তনগুলো রোলব্যাক হবে

            // ৮. Commit করা
            connection.commit();
            System.out.println("Transaction completed successfully.");
        } catch (SQLException e) {
            try {
                // ৯. যদি কোনো ত্রুটি ঘটে তবে rollback করা
                if (connection != null) {
                    connection.rollback();
                    System.out.println("Transaction rolled back due to error.");
                }
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        } finally {
            try {
                // ১০. সংযোগ বন্ধ করা
                if (statement != null) statement.close();
                if (connection != null) connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

কোড ব্যাখ্যা:

  1. Savepoint: connection.setSavepoint("Savepoint1") মেথড ব্যবহার করে একটি সেভপয়েন্ট তৈরি করা হয়।
  2. Rollback to Savepoint: connection.rollback(savepoint) মেথড ব্যবহার করে সেভপয়েন্টের পরে সমস্ত পরিবর্তন রোলব্যাক করা হয়, তবে পূর্বের পরিবর্তনগুলি অক্ষত থাকে।

সারাংশ

Transaction Management JDBC-তে একটি গুরুত্বপূর্ণ বিষয়, যা ডেটাবেসে একাধিক অপারেশন একত্রে বা অ্যাটমিকভাবে সম্পাদন করতে সহায়তা করে। JDBC-তে ট্রানজেকশন ব্যবস্থাপনা commit, rollback, এবং savepoint এর মাধ্যমে পরিচালিত হয়। Autocommit মোডে ডেটাবেসের প্রতিটি SQL অপারেশন স্বয়ংক্রিয়ভাবে কমিট হয়, তবে ম্যানুয়ালি ট্রানজেকশন পরিচালনা করার জন্য autocommit বন্ধ করা হয় এবং commit বা rollback ব্যবহার করে প্রয়োজনীয় পরিবর্তনগুলো সেভ বা ফিরিয়ে আনা হয়। Savepoints ব্যবহার করে, বৃহৎ ট্রানজেকশনের মধ্যে ছোট ছোট অংশ রোলব্যাক করা সম্ভব।

Content added By
Promotion

Are you sure to start over?

Loading...