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
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
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
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
Read more