CallableStatement হলো JDBC-এ স্টোরড প্রোসিডিউর কল করার জন্য একটি ইন্টারফেস। এটি সব RDBMS-এ স্টোরড প্রোসিডিউর কল করার একটি স্ট্যান্ডার্ড পথ প্রদান করে (SQL escape syntax: {call procedure_name(?, ?, ?)})।
CallableStatement তৈরি
Connection.prepareCall() মেথড ব্যবহার করে:
CallableStatement cstmt = con.prepareCall("{call myProcedure(?, ?, ?)}");
এখানে ? হলো প্লেসহোল্ডার (ইনপুট/আউটপুট প্যারামিটার)।
ইনপুট প্যারামিটার সেট করা
সেটার মেথডগুলো: setString(), setInt(), setFloat() ইত্যাদি। دو আর্গুমেন্ট নেয়: প্যারামিটার ইন্ডেক্স (১-ভিত্তিক) এবং মান।
cstmt.setString(1, "Raghav"); cstmt.setInt(2, 3000); cstmt.setString(3, "Hyderabad");
প্যারামিটার নাম দিয়েও সেট করা যায়: cstmt.setString("paramName", "value")।
এक्सিকিউশন
cstmt.execute();
যদি প্রোসিডিউর রেজাল্টসেট রিটার্ন করে তবে executeQuery(), আপডেট কাউন্টের জন্য executeUpdate() ব্যবহার করুন।
সম্পূর্ণ উদাহরণ
ডেটাবেসে প্রোসিডিউর:
CREATE PROCEDURE myProcedure (IN name VARCHAR(30), IN sal INT, IN loc VARCHAR(45))
BEGIN
INSERT INTO Employee(Name, Salary, Location) VALUES (name, sal, loc);
END //
Java কোড:
CallableStatement cstmt = con.prepareCall("{call myProcedure(?, ?, ?)}");
cstmt.setString(1, "Raghav"); cstmt.setInt(2, 3000); cstmt.setString(3, "Hyderabad");
cstmt.setString(1, "Kalyan"); cstmt.setInt(2, 4000); cstmt.setString(3, "Vishakhapatnam");
cstmt.setString(1, "Rukmini"); cstmt.setInt(2, 5000); cstmt.setString(3, "Delhi");
cstmt.setString(1, "Archana"); cstmt.setInt(2, 15000); cstmt.setString(3, "Mumbai");
cstmt.execute();
System.out.println("Rows inserted ....");
আউটপুট: Connection established...... Rows inserted ....
ডেটাবেস যাচাই:
mysql> SELECT * FROM employee; +---------+--------+----------------+ | Name | Salary | Location | +---------+--------+----------------+ | Amit | 30000 | Hyderabad | | Kalyan | 40000 | Vishakhapatnam | | Renuka | 50000 | Delhi | | Archana | 15000 | Mumbai | | Raghav | 3000 | Hyderabad | | Raghav | 3000 | Hyderabad | | Kalyan | 4000 | Vishakhapatnam | | Rukmini | 5000 | Delhi | | Archana | 15000 | Mumbai | +---------+--------+----------------+
গুরুত্বপূর্ণ: আউটপুট প্যারামিটার রেজিস্টার করতে registerOutParameter(int index, int sqlType) ব্যবহার করুন। আউটপুট মান পেতে getString(), getInt() ইত্যাদি।