CallableStatement ব্যবহার করে Stored Procedures কল করা

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

326

CallableStatement ব্যবহার করে Java অ্যাপ্লিকেশনে Stored Procedures কল করা সম্ভব। Stored Procedure হল একটি প্রিপ্রোগ্রামড SQL ব্লক, যা একাধিক SQL স্টেটমেন্ট একসাথে এক্সিকিউট করে। CallableStatement মূলত PreparedStatement এর মতোই কাজ করে, তবে এটি Stored Procedures অথবা ফাংশন কল করার জন্য ব্যবহৃত হয়।

এটি ডেটাবেসের সাথে যোগাযোগের জন্য অনেক বেশি কার্যকরী, কারণ আপনি একাধিক SQL এক্সিকিউট করতে পারেন এবং কোডের পুনঃব্যবহারযোগ্যতা বাড়াতে পারেন।

এই টিউটোরিয়ালে আমরা দেখব কিভাবে CallableStatement ব্যবহার করে Stored Procedures কল করা যায়।


1. Stored Procedure কী?

Stored Procedure হল একটি বা একাধিক SQL স্টেটমেন্টের সমন্বয়, যা ডেটাবেসে সংরক্ষিত থাকে এবং পরে প্রয়োজনে পুনরায় এক্সিকিউট করা যায়। Stored Procedure তৈরি করা যায়, যাতে বারবার একই কোড চালানো না লাগে এবং ডেটাবেস অপারেশনগুলো কার্যকরভাবে পরিচালিত হয়।

উদাহরণস্বরূপ, একটি Stored Procedure যা ইউজার টেবিল থেকে নির্দিষ্ট ইউজারের তথ্য ফেচ করতে পারে:

DELIMITER CREATEPROCEDUREGetUserDetails(INuserIdINT)BEGINSELECT*FROMusersWHEREid=userId;END

CREATE PROCEDURE GetUserDetails(IN userId INT)
BEGIN
    SELECT * FROM users WHERE id = userId;
END

DELIMITER ;

এখানে, GetUserDetails নামে একটি Stored Procedure তৈরি করা হয়েছে যা একটি ইনপুট আর্গুমেন্ট নিয়ে ইউজারের তথ্য ফেচ করে।


2. CallableStatement ব্যবহার করে Stored Procedure কল করা

Java-তে CallableStatement ব্যবহার করে আমরা এই Stored Procedure-কে কল করতে পারি। নিচে আমরা একটি উদাহরণ দেখবো যেখানে CallableStatement দিয়ে GetUserDetails Stored Procedure কল করা হচ্ছে।

2.1 Stored Procedure কল করার উদাহরণ

import java.sql.*;

public class CallableStatementExample {
    public static void main(String[] args) {
        Connection conn = null;
        CallableStatement stmt = null;
        ResultSet rs = null;

        try {
            // JDBC ড্রাইভার লোড করা
            Class.forName("com.mysql.cj.jdbc.Driver");

            // ডেটাবেসে সংযোগ
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "password");

            // Stored Procedure কল করার জন্য CallableStatement তৈরি
            String sql = "{call GetUserDetails(?)}";
            stmt = conn.prepareCall(sql);

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

            // Stored Procedure এক্সিকিউট করা
            rs = stmt.executeQuery();

            // ফলাফল প্রিন্ট করা
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                int age = rs.getInt("age");

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

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (rs != null) rs.close();
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

এখানে:

  • {call GetUserDetails(?)};: এটি Stored Procedure কল করার সিনট্যাক্স। এখানে ? হল ইনপুট প্যারামিটার (যেমন userId)।
  • stmt.setInt(1, 1);: এটি প্যারামিটার হিসেবে 1 মান পাঠিয়ে Stored Procedure কল করছে।
  • stmt.executeQuery();: এটি Stored Procedure চালিয়ে ডেটা রিটার্ন করবে (যেহেতু এটি একটি SELECT কোয়েরি রিটার্ন করছে)।
  • ResultSet rs = stmt.executeQuery();: ফলাফল ResultSet এ রিটার্ন হবে।

3. Stored Procedure তে আউটপুট প্যারামিটার ব্যবহার

বেশ কিছু Stored Procedure আউটপুট প্যারামিটারও ব্যবহার করে, যার মাধ্যমে ফলাফল রিটার্ন করা হয়। CallableStatement ব্যবহার করে আপনি আউটপুট প্যারামিটারও সেট করতে পারেন।

3.1 আউটপুট প্যারামিটার সহ Stored Procedure

ধরা যাক, আমরা একটি Stored Procedure তৈরি করেছি যা আউটপুট প্যারামিটার রিটার্ন করে। উদাহরণস্বরূপ:

DELIMITER CREATEPROCEDUREGetUserAge(INuserIdINT,OUTuserAgeINT)BEGINSELECTageINTOuserAgeFROMusersWHEREid=userId;END

CREATE PROCEDURE GetUserAge(IN userId INT, OUT userAge INT)
BEGIN
    SELECT age INTO userAge FROM users WHERE id = userId;
END

DELIMITER ;

এখানে, GetUserAge একটি আউটপুট প্যারামিটার userAge রিটার্ন করে, যা ইউজারের বয়স ধারণ করবে।

3.2 CallableStatement ব্যবহার করে আউটপুট প্যারামিটার রিটার্ন করা

import java.sql.*;

public class CallableStatementOutputExample {
    public static void main(String[] args) {
        Connection conn = null;
        CallableStatement stmt = null;

        try {
            // JDBC ড্রাইভার লোড করা
            Class.forName("com.mysql.cj.jdbc.Driver");

            // ডেটাবেসে সংযোগ
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "password");

            // Stored Procedure কল করার জন্য CallableStatement তৈরি
            String sql = "{call GetUserAge(?, ?)}";
            stmt = conn.prepareCall(sql);

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

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

            // Stored Procedure এক্সিকিউট করা
            stmt.execute();

            // আউটপুট প্যারামিটার থেকে মান গ্রহণ করা
            int age = stmt.getInt(2);

            // ফলাফল প্রিন্ট করা
            System.out.println("User's Age: " + age);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

এখানে:

  • stmt.registerOutParameter(2, Types.INTEGER);: এটি আউটপুট প্যারামিটার রেজিস্টার করে।
  • stmt.getInt(2);: এটি আউটপুট প্যারামিটার থেকে রিটার্ন হওয়া মান গ্রহণ করে।

4. Multiple Parameters সহ Stored Procedure

যদি Stored Procedure একাধিক প্যারামিটার ব্যবহার করে, তবে আপনি CallableStatement তে বিভিন্ন প্যারামিটার সেট করতে পারেন। উদাহরণস্বরূপ, একটি Stored Procedure যেখানে ইউজারকে আপডেট করার জন্য ইনপুট প্যারামিটার দেওয়া হচ্ছে:

DELIMITER CREATEPROCEDUREUpdateUserDetails(INuserIdINT,INuserNameVARCHAR(255),INuserAgeINT)BEGINUPDATEusersSETname=userName,age=userAgeWHEREid=userId;END

CREATE PROCEDURE UpdateUserDetails(IN userId INT, IN userName VARCHAR(255), IN userAge INT)
BEGIN
    UPDATE users SET name = userName, age = userAge WHERE id = userId;
END

DELIMITER ;

এই Stored Procedure কে কল করার জন্য:

import java.sql.*;

public class UpdateUserExample {
    public static void main(String[] args) {
        Connection conn = null;
        CallableStatement stmt = null;

        try {
            // JDBC ড্রাইভার লোড করা
            Class.forName("com.mysql.cj.jdbc.Driver");

            // ডেটাবেসে সংযোগ
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "password");

            // Stored Procedure কল করার জন্য CallableStatement তৈরি
            String sql = "{call UpdateUserDetails(?, ?, ?)}";
            stmt = conn.prepareCall(sql);

            // ইনপুট প্যারামিটার সেট করা
            stmt.setInt(1, 1);             // userId
            stmt.setString(2, "John Doe"); // userName
            stmt.setInt(3, 30);            // userAge

            // Stored Procedure এক্সিকিউট করা
            stmt.executeUpdate();

            System.out.println("User details updated successfully.");

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

এখানে:

  • stmt.setInt(1, 1): userId প্যারামিটার।
  • stmt.setString(2, "John Doe"): userName প্যারামিটার।
  • stmt.setInt(3, 30): userAge প্যারামিটার।

সারাংশ

CallableStatement ব্যবহার করে Java অ্যাপ্লিকেশনে **Stored Procedures

Content added By
Promotion

Are you sure to start over?

Loading...