JDBC (Java Database Connectivity) ব্যবহার করে আপনি SQL কুয়েরি চালানোর পাশাপাশি Stored Procedures কল করতে পারেন। CallableStatement হল একটি জেডিবিসি অবজেক্ট যা SQL Stored Procedure বা ফাংশন কল করতে ব্যবহৃত হয়। এটি PreparedStatement এর মতোই কাজ করে, তবে এটি Stored Procedures এবং SQL Functions-এ কাজ করার জন্য বিশেষভাবে ডিজাইন করা হয়েছে।
Stored Procedures হল ডেটাবেসে সংরক্ষিত প্রোগ্রাম যা SQL স্টেটমেন্ট, লজিক এবং অন্যান্য কার্যক্রম একত্রিত করে। এগুলি ডেটাবেস সার্ভারের মধ্যে থাকে এবং পুনরায় ব্যবহারযোগ্য হয়।
এই অধ্যায়ে, CallableStatement এবং Stored Procedures ব্যবহার করার প্রক্রিয়া এবং উদাহরণ দেওয়া হবে।
CallableStatement এর কাজ
CallableStatement হল JDBC API-তে একটি ইন্টারফেস যা ডেটাবেসের Stored Procedures বা ফাংশন কল করতে ব্যবহৃত হয়। এটি PreparedStatement এর মতোই কাজ করে তবে এটিতে সঞ্চিত (stored) প্রক্রিয়া বা ফাংশন চালানো সম্ভব।
CallableStatement তৈরি এবং Stored Procedure কল করা
Step 1: Stored Procedure তৈরি করা
প্রথমে, ডেটাবেসে একটি Stored Procedure তৈরি করতে হবে। ধরুন, আমাদের একটি users টেবিল আছে এবং আমরা একটি Stored Procedure তৈরি করব যা ইউজারের id দ্বারা ইউজারের নাম রিটার্ন করবে।
MySQL এ Stored Procedure উদাহরণ:
DELIMITER
DELIMITER ;
এখানে, GetUserById একটি Stored Procedure যা userId ইনপুট নেবে এবং সেই id এর সাথে মিলিত ইউজারের নাম রিটার্ন করবে।
Step 2: Java Code-এ CallableStatement ব্যবহার
এখন আমরা Java দিয়ে এই Stored Procedure কল করব।
উদাহরণ: CallableStatement দিয়ে Stored Procedure কল করা
import java.sql.*;
public class CallableStatementExample {
public static void main(String[] args) {
// ডেটাবেসের সংযোগ তথ্য
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
try (Connection conn = DriverManager.getConnection(url, username, password)) {
System.out.println("Connection established!");
// CallableStatement তৈরি করা
String sql = "{call GetUserById(?)}";
CallableStatement stmt = conn.prepareCall(sql);
// ইনপুট প্যারামিটার সেট করা (যেমন userId)
stmt.setInt(1, 1); // 1 হল userId, এখানে আমরা id=1 এর নাম চাই
// Stored Procedure এর রেজাল্ট প্রাপ্তি
ResultSet rs = stmt.executeQuery();
// রেজাল্ট প্রিন্ট করা
if (rs.next()) {
String name = rs.getString("name");
System.out.println("User Name: " + name);
}
// রিসোর্স বন্ধ করা
rs.close();
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
কোড ব্যাখ্যা:
- Connection:
DriverManager.getConnection()মেথড দিয়ে ডেটাবেসে সংযোগ তৈরি করা হয়েছে। - CallableStatement:
{call GetUserById(?)}এর মাধ্যমেGetUserByIdনামক Stored Procedure কল করা হয়েছে। এখানে?হল ইনপুট প্যারামিটার যাuserIdহিসেবে ব্যবহৃত হবে। - setInt():
stmt.setInt(1, 1)মেথডের মাধ্যমেuserIdপ্যারামিটার 1 হিসেবে সেট করা হয়েছে। - executeQuery():
executeQuery()মেথড দিয়ে SQL কুয়েরি চালানো হয়েছে যা রেজাল্ট সেট ফেরত দিবে। - ResultSet:
rs.getString("name")ব্যবহার করে ফলাফল থেকে ইউজারের নাম রিট্রাইভ করা হয়েছে।
CallableStatement দিয়ে আউটপুট প্যারামিটার ব্যবহার
বেশ কিছু Stored Procedure আউটপুট প্যারামিটার ব্যবহার করে, যেখানে আউটপুট ডেটা ডেটাবেসে সেট করা হয় এবং Java অ্যাপ্লিকেশন সেই আউটপুট গ্রহণ করে। এটির জন্য registerOutParameter() মেথড ব্যবহার করা হয়।
উদাহরণ: আউটপুট প্যারামিটার সহ CallableStatement
import java.sql.*;
public class CallableStatementOutParamExample {
public static void main(String[] args) {
// ডেটাবেসের সংযোগ তথ্য
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
try (Connection conn = DriverManager.getConnection(url, username, password)) {
System.out.println("Connection established!");
// CallableStatement তৈরি করা
String sql = "{call GetUserNameById(?, ?)}"; // দুটি প্যারামিটার: id এবং আউটপুট নাম
CallableStatement stmt = conn.prepareCall(sql);
// ইনপুট প্যারামিটার সেট করা
stmt.setInt(1, 1); // userId = 1
// আউটপুট প্যারামিটার রেজিস্টার করা
stmt.registerOutParameter(2, Types.VARCHAR); // আউটপুট টাইপ হল VARCHAR
// Stored Procedure এক্সিকিউট করা
stmt.execute();
// আউটপুট প্যারামিটার রিটার্ন করা
String userName = stmt.getString(2);
System.out.println("User Name: " + userName);
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
কোড ব্যাখ্যা:
- registerOutParameter(): এটি আউটপুট প্যারামিটার রেজিস্টার করতে ব্যবহৃত হয়, এখানে
Types.VARCHARব্যবহার করা হয়েছে কারণ ইউজারের নাম একটি স্ট্রিং (VARCHAR) টাইপ। - getString(): আউটপুট প্যারামিটার রিটার্ন করার জন্য
stmt.getString(2)ব্যবহার করা হয়েছে, যাuserNameআউটপুট প্যারামিটার থেকে ডেটা রিটার্ন করবে।
Conclusion
CallableStatement JDBC API-তে একটি গুরুত্বপূর্ণ অংশ, যা Stored Procedures এবং SQL Functions চালাতে সহায়তা করে। Stored Procedures ডেটাবেসে সংরক্ষিত SQL কোড যা পুনরায় ব্যবহৃত হতে পারে এবং এটি অধিক কার্যকরী ও নিরাপদ ডেটাবেস অপারেশন পরিচালনা করতে সহায়তা করে।
CallableStatement ব্যবহার করে ইনপুট এবং আউটপুট প্যারামিটার সহ Stored Procedure কল করা যায়, যা Java অ্যাপ্লিকেশনগুলোকে ডেটাবেসের কার্যক্রম আরও দক্ষভাবে পরিচালনা করতে সক্ষম করে।
Read more