SQL স্টোরড প্রোসিজার কল করতে CallableStatement ইন্টারফেস ব্যবহার করা হয়। একটি Callable statement-এ ইনপুট প্যারামিটার, আউটপুট প্যারামিটার বা দুটোই থাকতে পারে।
Connection ইন্টারফেসের prepareCall() মেথড ব্যবহার করে CallableStatement অবজেক্ট তৈরি করা হয়। এই মেথড একটি স্ট্রিং ভেরিয়েবল গ্রহণ করে যা স্টোরড প্রোসিজার কল করার কোয়েরি প্রতিনিধিত্ব করে এবং একটি CallableStatement অবজেক্ট রিটার্ন করে।
ধরি ডেটাবেসে myProcedure নামক একটি প্রোসিজার আছে। তাহলে:
// Preparing a CallableStatement
CallableStatement cstmt = con.prepareCall("{call myProcedure(?, ?, ?)}");
তারপর setter মেথডগুলো ব্যবহার করে প্লেসহোল্ডারগুলোর মান সেট করুন এবং execute() মেথড দিয়ে এক্সিকিউট করুন।
cstmt.setString(1, "Raghav"); cstmt.setInt(2, 3000); cstmt.setString(3, "Hyderabad"); cstmt.execute();
যদি প্রোসিজারের জন্য কোনো ইনপুট মান না থাকে, তবে সরাসরি প্রস্তুত করে এক্সিকিউট করুন।
CallableStatement cstmt = con.prepareCall("{call myProcedure()}");
cstmt.execute();
উদাহরণ
ধরি MySQL ডেটাবেসে Dispatches নামক একটি টেবিল আছে নিচের ডেটার সাথে:
+--------------+------------------+------------------+----------------+ | Product_Name | Date_Of_Dispatch | Time_Of_Dispatch | Location | +--------------+------------------+------------------+----------------+ | KeyBoard | 1970-01-19 | 08:51:36 | Hyderabad | | Earphones | 1970-01-19 | 05:54:28 | Vishakhapatnam | | Mouse | 1970-01-19 | 04:26:38 | Vijayawada | +--------------+------------------+------------------+----------------+
এবং myProcedure নামক প্রোসিজার তৈরি করা হয়েছে:
Create procedure myProcedure () -> BEGIN -> SELECT * FROM Dispatches; -> END //
উদাহরণ
নিচের JDBC উদাহরণ স্টোরড প্রোসিজার কল করে।
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
public class CallingProcedure {
public static void main(String args[]) throws SQLException {
// ড্রাইভার রেজিস্টার
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
// কানেকশন
String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
System.out.println("Connection established......");
// CallableStatement প্রস্তুত
CallableStatement cstmt = con.prepareCall("{call myProcedure()}");
// ফলাফল বের করা
ResultSet rs = cstmt.executeQuery();
while (rs.next()) {
System.out.println("Product Name: " + rs.getString("Product_Name"));
System.out.println("Date of Dispatch: " + rs.getDate("Date_Of_Dispatch"));
System.out.println("Time of Dispatch: " + rs.getTime("Time_Of_Dispatch"));
System.out.println("Location: " + rs.getString("Location"));
System.out.println();
}
}
}
আউটপুট
Connection established...... Product Name: KeyBoard Date of Dispatch: 1970-01-19 Time of Dispatch: 08:51:36 Location: Hyderabad Product Name: Earphones Date of Dispatch: 1970-01-19 Time of Dispatch: 05:54:28 Location: Vishakhapatnam Product Name: Mouse Date of Dispatch: 1970-01-19 Time of Dispatch: 04:26:38 Location: Vijayawada