কম্পিউটার

JDBC-তে CallableStatement কি?


কলেবল স্টেটমেন্ট ইন্টারফেস সঞ্চিত পদ্ধতিগুলি চালানোর পদ্ধতি প্রদান করে। যেহেতু JDBC API একটি সঞ্চিত পদ্ধতি SQL escape সিনট্যাক্স প্রদান করে, আপনি একক স্ট্যান্ডার্ড উপায়ে সমস্ত RDBMS-এর সঞ্চিত পদ্ধতি কল করতে পারেন।

একটি কলযোগ্য বিবৃতি তৈরি করা

আপনি CallableStatement এর একটি বস্তু তৈরি করতে পারেন (ইন্টারফেস) prepareCall() ব্যবহার করে সংযোগের পদ্ধতি ইন্টারফেস. এই পদ্ধতিটি একটি স্ট্রিং ভেরিয়েবল গ্রহণ করে যা সঞ্চিত পদ্ধতিতে কল করার জন্য একটি প্রশ্নের প্রতিনিধিত্ব করে এবং একটি CallableStatement প্রদান করে বস্তু।

একটি কলযোগ্য বিবৃতিতে ইনপুট প্যারামিটার, আউটপুট প্যারামিটার বা উভয়ই থাকতে পারে। পদ্ধতি কলে ইনপুট পরামিতিগুলি পাস করার জন্য আপনি প্লেস হোল্ডার ব্যবহার করতে পারেন এবং CallableStatement ইন্টারফেস দ্বারা প্রদত্ত সেটার পদ্ধতি (setInt(), setString(), setFloat()) ব্যবহার করে এগুলির মান সেট করতে পারেন৷

ধরুন আপনার ডাটাবেসে একটি পদ্ধতির নাম myProcedure আছে আপনি এইভাবে একটি কলযোগ্য বিবৃতি প্রস্তুত করতে পারেন:

//Preparing a CallableStatement
CallableStatement cstmt = con.prepareCall("{call myProcedure(?, ?, ?)}");

ইনপুট প্যারামিটারে মান সেট করা

আপনি সেটার পদ্ধতি ব্যবহার করে পদ্ধতি কলের ইনপুট প্যারামিটারে মান সেট করতে পারেন।

এগুলি দুটি আর্গুমেন্ট গ্রহণ করে, একটি হল একটি পূর্ণসংখ্যা মান যা ইনপুট প্যারামিটারের প্লেসমেন্ট সূচকের প্রতিনিধিত্ব করে এবং অন্যটি হল একটি int বা, স্ট্রিং বা, ফ্লোট ইত্যাদি… পদ্ধতিতে ইনপুট প্যারামিটারটি পাস করার জন্য আপনাকে প্রয়োজনীয় মানটি উপস্থাপন করে৷

দ্রষ্টব্য: ইনডেক্সের পরিবর্তে আপনি স্ট্রিং ফরম্যাটে প্যারামিটারের নামও পাস করতে পারেন।

cstmt.setString(1, "Raghav");
cstmt.setInt(2, 3000);
cstmt.setString(3, "Hyderabad");

কলযোগ্য বিবৃতি কার্যকর করা হচ্ছে

একবার আপনি CallableStatement অবজেক্ট তৈরি করলে আপনি execute() এর একটি ব্যবহার করে এটি চালাতে পারেন পদ্ধতি।

cstmt.execute();

উদাহরণ

ধরুন আমাদের কর্মচারী নামের একটি টেবিল আছে নিম্নলিখিত ডেটা সহ MySQL ডাটাবেসে:

+---------+--------+----------------+
| Name    | Salary | Location       |
+---------+--------+----------------+
| Amit    | 30000  | Hyderabad      |
| Kalyan  | 40000  | Vishakhapatnam |
| Renuka  | 50000  | Delhi          |
| Archana | 15000  | Mumbai         |
+---------+--------+----------------+

এবং আমরা নিচের মত এই টেবিলে মান সন্নিবেশ করার জন্য myProcedure নামে একটি পদ্ধতি তৈরি করেছি:

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 //

নিম্নলিখিত একটি JDBC উদাহরণ যা কলযোগ্য বিবৃতি ব্যবহার করে উপরে তৈরি পদ্ধতিতে কল করে কর্মচারী টেবিলে নতুন রেকর্ড সন্নিবেশ করায়৷

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class CallableStatementExample {
   public static void main(String args[]) throws SQLException {
      //Registering the Driver
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());

      //Getting the connection
      String mysqlUrl = "jdbc:mysql://localhost/testdb";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");
      //Preparing a CallableStateement
      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         |
+---------+--------+----------------+
9 rows in set (0.00 sec)

  1. 3D প্রিন্টিং কি?

  2. আইপি ঠিকানা কী?

  3. MySQL JDBC ড্রাইভার সংযোগ স্ট্রিং কি?

  4. JDBC ফলাফল কি? কিভাবে ResultSet অবজেক্ট থেকে ডেটা পুনরুদ্ধার করবেন?