Java দিয়ে MySQL Stored Procedures Execute করা

Stored Procedures এবং Functions - জাভা মাইএসকিউএল (Java MySQL) - Database Tutorials

385

Stored Procedure হল একটি প্রি-ডিফাইন্ড SQL কোড ব্লক যা ডেটাবেসে সংরক্ষিত থাকে এবং একাধিকবার এক্সিকিউট করা যেতে পারে। Stored Procedures MySQL ডেটাবেসে সাধারণত ডেটা ম্যানিপুলেশন, সিকোয়েন্সিয়াল লজিক বা কাস্টম লজিক সংরক্ষণের জন্য ব্যবহৃত হয়। Java থেকে MySQL Stored Procedures এক্সিকিউট করার জন্য আমরা CallableStatement ব্যবহার করি।

এখানে Java দিয়ে MySQL Stored Procedure এক্সিকিউট করার একটি উদাহরণ দেওয়া হচ্ছে।


১. Stored Procedure তৈরি করা

প্রথমে, MySQL ডেটাবেসে একটি Stored Procedure তৈরি করতে হবে। ধরুন, আমরা একটি Stored Procedure তৈরি করছি যা একটি employees টেবিল থেকে নির্দিষ্ট বিভাগের কর্মচারীদের তালিকা রিটার্ন করবে।

Stored Procedure উদাহরণ:

DELIMITER //

CREATE PROCEDURE getEmployeesByDepartment(IN dept_name VARCHAR(255))
BEGIN
    SELECT id, name, department FROM employees WHERE department = dept_name;
END //

DELIMITER ;

এই getEmployeesByDepartment প্রোসিডিউরটি একটি বিভাগ (department) নাম গ্রহণ করে এবং ওই বিভাগে থাকা সব কর্মচারীর id, name, এবং department রিটার্ন করে।


২. Java দিয়ে Stored Procedure Execute করা

Java দিয়ে MySQL Stored Procedure এক্সিকিউট করার জন্য CallableStatement ব্যবহার করতে হয়। এখানে আমরা একটি PreparedStatement ব্যবহার করব যা প্রোসিডিউরের প্যারামিটার গ্রহণ করবে এবং এক্সিকিউট করবে।

Java Code উদাহরণ:

import java.sql.*;

public class CallStoredProcedureExample {

    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase"; // আপনার ডেটাবেস URL
        String user = "root"; // MySQL ইউজারনেম
        String password = "password"; // MySQL পাসওয়ার্ড

        // প্রোসিডিউরের প্যারামিটার (department নাম)
        String deptName = "HR";

        // ডেটাবেস সংযোগ স্থাপন ও Stored Procedure Execute করা
        try {
            // MySQL JDBC ড্রাইভার লোড করা
            Class.forName("com.mysql.cj.jdbc.Driver");

            // ডেটাবেসের সাথে সংযোগ স্থাপন
            Connection conn = DriverManager.getConnection(url, user, password);
            System.out.println("Connection Successful!");

            // CallableStatement ব্যবহার করে Stored Procedure কল করা
            String sql = "{CALL getEmployeesByDepartment(?)}";
            CallableStatement stmt = conn.prepareCall(sql);

            // প্রোসিডিউরের ইনপুট প্যারামিটার সেট করা
            stmt.setString(1, deptName);

            // প্রোসিডিউর এক্সিকিউট করা
            ResultSet rs = stmt.executeQuery();

            // রিটার্ন হওয়া রেকর্ডগুলি প্রদর্শন
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String department = rs.getString("department");

                System.out.println("ID: " + id + ", Name: " + name + ", Department: " + department);
            }

            // সংযোগ বন্ধ করা
            conn.close();

        } catch (ClassNotFoundException e) {
            System.out.println("JDBC Driver not found: " + e.getMessage());
        } catch (SQLException e) {
            System.out.println("Database connection failed: " + e.getMessage());
        }
    }
}

৩. কোডের ব্যাখ্যা

  1. Class.forName("com.mysql.cj.jdbc.Driver"): JDBC ড্রাইভার লোড করা।
  2. DriverManager.getConnection(url, user, password): ডেটাবেসের সাথে সংযোগ স্থাপন।
  3. String sql = "{CALL getEmployeesByDepartment(?)}": MySQL Stored Procedure কল করার জন্য SQL স্টেটমেন্ট। এখানে ? হল প্রোসিডিউরের প্যারামিটার।
  4. CallableStatement stmt = conn.prepareCall(sql): SQL কুয়েরি প্রস্তুত করার জন্য prepareCall ব্যবহার করা হয়, যা প্রোসিডিউর কল করে।
  5. stmt.setString(1, deptName): প্রোসিডিউরের প্রথম প্যারামিটার হিসাবে বিভাগ নাম (department) প্রদান করা।
  6. ResultSet rs = stmt.executeQuery(): প্রোসিডিউরটি এক্সিকিউট করে, এবং রিটার্ন হওয়া ডেটা ResultSet-এ ধারণ করা হয়।
  7. while (rs.next()): রিটার্ন হওয়া ডেটা দিয়ে লুপ চালানো হয় এবং প্রতিটি রেকর্ডের তথ্য প্রদর্শন করা হয়।
  8. conn.close(): ডেটাবেস সংযোগ বন্ধ করা।

৪. Stored Procedure এর আউটপুট ব্যবহার

যদি Stored Procedure কোনো আউটপুট প্যারামিটারও রিটার্ন করে, যেমন সংখ্যা বা স্ট্রিং, তবে আপনি registerOutParameter ব্যবহার করে আউটপুট প্যারামিটার সেট করতে পারেন।

উদাহরণ:

ধরা যাক, আপনি একটি প্রোসিডিউর তৈরি করেছেন যা একটি বিভাগের কর্মচারী সংখ্যা রিটার্ন করবে।

DELIMITER //

CREATE PROCEDURE getEmployeeCountByDepartment(IN dept_name VARCHAR(255), OUT emp_count INT)
BEGIN
    SELECT COUNT(*) INTO emp_count FROM employees WHERE department = dept_name;
END //

DELIMITER ;

এবার Java কোডে এই প্রোসিডিউর কল করার উদাহরণ:

import java.sql.*;

public class CallStoredProcedureWithOutParameter {

    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase"; 
        String user = "root"; 
        String password = "password"; 

        String deptName = "HR";  // Department name

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");

            Connection conn = DriverManager.getConnection(url, user, password);
            System.out.println("Connection Successful!");

            String sql = "{CALL getEmployeeCountByDepartment(?, ?)}";
            CallableStatement stmt = conn.prepareCall(sql);

            // ইনপুট প্যারামিটার সেট করা
            stmt.setString(1, deptName);

            // আউটপুট প্যারামিটার রেজিস্টার করা
            stmt.registerOutParameter(2, Types.INTEGER);

            // প্রোসিডিউর এক্সিকিউট করা
            stmt.execute();

            // আউটপুট প্যারামিটার থেকে মান নিয়ে আসা
            int empCount = stmt.getInt(2);
            System.out.println("Total employees in " + deptName + " department: " + empCount);

            conn.close();

        } catch (ClassNotFoundException e) {
            System.out.println("JDBC Driver not found: " + e.getMessage());
        } catch (SQLException e) {
            System.out.println("Database connection failed: " + e.getMessage());
        }
    }
}

এখানে, registerOutParameter ব্যবহার করে আউটপুট প্যারামিটার emp_count রেজিস্টার করা হয়েছে এবং তারপর getInt ব্যবহার করে তা রিটার্ন করা হয়েছে।


সারাংশ

Java দিয়ে MySQL Stored Procedures এক্সিকিউট করার জন্য CallableStatement ব্যবহার করা হয়। এটি MySQL ডেটাবেসের Stored Procedure কল করতে এবং প্যারামিটার পাস করতে সাহায্য করে। Java কোডে প্রোসিডিউর কল করার পর, আমরা আউটপুট প্যারামিটার বা ফলাফল ResultSet দিয়ে প্রক্রিয়া করতে পারি। PreparedStatement এর মাধ্যমে নিরাপদ ও কার্যকরী Stored Procedure কল করা যায়, যা ডেটাবেসে সংরক্ষিত লজিককে Java অ্যাপ্লিকেশন থেকে কার্যকরভাবে ব্যবহার করতে সাহায্য করে।

Content added By
Promotion

Are you sure to start over?

Loading...