প্রস্তুত বিবৃতি ইন্টারফেস স্টেটমেন্ট ইন্টারফেসকে প্রসারিত করে এটি একটি প্রাক-সংকলিত SQL স্টেটমেন্ট উপস্থাপন করে যা একাধিকবার কার্যকর করা যেতে পারে। এটি প্যারামিটারাইজড SQL quires গ্রহণ করে এবং আপনি এই ক্যোয়ারীতে 0 বা তার বেশি প্যারামিটার পাস করতে পারেন।
প্রাথমিকভাবে এই বিবৃতিটি স্থানধারক “?” ব্যবহার করে পরামিতিগুলির পরিবর্তে, পরে আপনি প্রস্তুত বিবৃতি-এর সেটXXX() পদ্ধতিগুলি ব্যবহার করে গতিশীলভাবে এইগুলিতে আর্গুমেন্টগুলি প্রেরণ করতে পারেন ইন্টারফেস।
একটি প্রস্তুত বিবৃতি তৈরি করা
আপনি প্রস্তুত বিবৃতি এর একটি বস্তু তৈরি করতে পারেন (ইন্টারফেস) prepareStatement() ব্যবহার করে সংযোগ ইন্টারফেসের পদ্ধতি। এই পদ্ধতিটি একটি প্রশ্ন (প্যারামিটারাইজড) গ্রহণ করে এবং একটি PreparedStatement অবজেক্ট প্রদান করে।
আপনি যখন এই পদ্ধতিটি ব্যবহার করেন তখন সংযোগ বস্তুটি কম্পাইল এবং সংরক্ষণ করতে প্রদত্ত প্রশ্নটি ডাটাবেসে পাঠায়। যদি ক্যোয়ারীটি সফলভাবে কম্পাইল করা হয় তবেই এটি বস্তুটি ফেরত দেয়।
একটি ক্যোয়ারী কম্পাইল করতে, ডাটাবেসের কোন মান প্রয়োজন হয় না তাই আপনি ব্যবহার করতে পারেন (শূন্য বা তার বেশি) প্লেসহোল্ডার (প্রশ্ন চিহ্ন ”?” ) ক্যোয়ারীতে মানের জায়গায়।
উদাহরণস্বরূপ, যদি আপনার কর্মচারী নামের একটি টেবিল থাকে ডাটাবেসে, নিম্নলিখিত ক্যোয়ারী ব্যবহার করে তৈরি করা হয়েছে।
CREATE TABLE Employee(Name VARCHAR(255), Salary INT NOT NULL, Location VARCHAR(255));
তারপরে নীচে দেখানো হিসাবে মান সন্নিবেশ করার জন্য আপনি একটি প্রস্তুত বিবৃতি ব্যবহার করতে পারেন।
//Creating a Prepared Statement String query="INSERT INTO Employee(Name, Salary, Location)VALUES(?, ?, ?)"; Statement pstmt = con.prepareStatement(query);
স্থানধারীদের মান নির্ধারণ করা
প্রস্তুত বিবৃতি ইন্টারফেস প্রস্তুতকৃত স্টেটমেন্টের স্থানধারকদের মান সেট করতে setInt(), setFloat(), setArray(), setDate(), setDouble() ইত্যাদির মতো বেশ কিছু সেটার পদ্ধতি প্রদান করে।
এই পদ্ধতিগুলি দুটি আর্গুমেন্ট গ্রহণ করে, একটি হল একটি পূর্ণসংখ্যা মান যা স্থান ফোল্ডারের স্থান নির্ধারণের সূচীকে প্রতিনিধিত্ব করে এবং অন্যটি একটি int বা, স্ট্রিং বা, ফ্লোট ইত্যাদি… সেই নির্দিষ্ট অবস্থানে আপনাকে যে মান সন্নিবেশ করতে হবে তার প্রতিনিধিত্ব করে৷
আপনি নীচের দেখানো সেটার পদ্ধতি ব্যবহার করে উপরের তৈরি স্টেটমেন্টের স্থানধারকদের মান সেট করতে পারেন:
pstmt.setString(1, "Amit"); pstmt.setInt(2, 3000); pstmt.setString(3, "Hyderabad"); pstmt.setString(1, "Kalyan"); pstmt.setInt(2, 4000); pstmt.setString(3, "Vishakhapatnam"); pstmt.setString(1, "Renuka"); pstmt.setInt(2, 5000); pstmt.setString(3, "Delhi"); pstmt.setString(1, "Archana"); pstmt.setInt(2, 15000); pstmt.setString(3, "Mumbai");
প্রস্তুত বিবৃতি কার্যকর করা
একবার আপনি PreparedStatement অবজেক্ট তৈরি করার পরে আপনি execute() এর একটি ব্যবহার করে এটি চালাতে পারেন PreparedStatement ইন্টারফেসের পদ্ধতিগুলি যথা, execute() , executeUpdate() এবং, executeQuery().
-
এক্সিকিউট(): এই পদ্ধতিটি বর্তমান প্রস্তুত স্টেটমেন্ট অবজেক্টে স্বাভাবিক স্ট্যাটিক এসকিউএল স্টেটমেন্ট নির্বাহ করে এবং একটি বুলিয়ান মান প্রদান করে।
-
executeQuery(): এই পদ্ধতি বর্তমান প্রস্তুত বিবৃতি কার্যকর করে এবং একটি ResultSet অবজেক্ট প্রদান করে।
-
executeUpdate(): এই পদ্ধতি SQL DML বিবৃতি যেমন বর্তমান প্রস্তুত বিবৃতিতে আপডেট সন্নিবেশ করানো বা মুছে ফেলার মত নির্বাহ করে। এটি প্রভাবিত সারি সংখ্যা প্রতিনিধিত্ব করে একটি পূর্ণসংখ্যা মান প্রদান করে।
আপনি নীচের দেখানো হিসাবে উপরে তৈরি প্রস্তুত বিবৃতি কার্যকর করতে পারেন:
উদাহরণ
এই উদাহরণে আমরা একটি প্রস্তুত বিবৃতি ব্যবহার করে কর্মচারী নামের একটি টেবিলে মান সন্নিবেশ করার চেষ্টা করছি৷
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class PreparedStatementExample { 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......"); //Creating a Prepared Statement String query = "INSERT INTO Employees(Name, Salary, Location) VALUES (?, ?, ?)"; PreparedStatement pstmt = con.prepareStatement(query); pstmt.setString(1, "Amit"); pstmt.setInt(2, 3000); pstmt.setString(3, "Hyderabad"); pstmt.setString(1, "Kalyan"); pstmt.setInt(2, 4000); pstmt.setString(3, "Vishakhapatnam"); pstmt.setString(1, "Renuka"); pstmt.setInt(2, 5000); pstmt.setString(3, "Delhi"); pstmt.setString(1, "Archana"); pstmt.setInt(2, 15000); pstmt.setString(3, "Mumbai"); int num = pstmt.executeUpdate(); System.out.println("Rows inserted ...."); } }
আউটপুট
Connection established...... Number of rows inserted: 1
আপনি যদি ডাটাবেস যাচাই করেন, তাহলে আপনি টেবিলে সন্নিবেশিত মানগুলি দেখতে পারেন:
+---------+--------+----------------+ | Name | Salary | Location | +---------+--------+----------------+ | Amit | 30000 | Hyderabad | | Kalyan | 40000 | Vishakhapatnam | | Renuka | 50000 | Delhi | | Archana | 15000 | Mumbai | +---------+--------+----------------+ 5 rows in set (0.00 sec)