কম্পিউটার টিউটোরিয়াল

JDBC-এ PreparedStatement কী এবং কীভাবে ব্যবহার করবেন

PreparedStatement হলো Statement-এর সাব-ইন্টারফেস, যা প্রিকম্পাইল্ড (precompiled) প্যারামিটারাইজড SQL কোয়েরি রিপ্রেজেন্ট করে। একই কোয়েরি বারবার এক্সিকিউট করতে পারেন ভিন্ন ভিন্ন প্যারামিটার দিয়ে।

সুবিধা

  • পারফরম্যান্স: কোয়েরি একবার কম্পাইল হয়, বারবার এক্সিকিউট হয়।
  • SQL ইনজেকশন প্রотеাকশন: প্যারামিটার আলাদা পাঠানো হয়, স্ট্রিং কনক্যাটেনেশন লাগে না।
  • রিডেবিলিটি: কোড পরিষ্কার।

PreparedStatement তৈরি

Connection.prepareStatement() মেথড:

String query = "INSERT INTO Employee(Name, Salary, Location) VALUES (?, ?, ?)";
PreparedStatement pstmt = con.prepareStatement(query);

এখানে ? প্লেসহোল্ডার। ডেটাবেস কোয়েরি কম্পাইল করে রেখে দেয়।

প্যারামিটার সেট করা

সেটার মেথড: setInt(), setString(), setDate(), setDouble() ইত্যাদি। আর্গুমেন্ট: প্লেসহোল্ডার ইন্ডেক্স (১-ভিত্তিক) এবং মান।

pstmt.setString(1, "Amit"); pstmt.setInt(2, 30000); pstmt.setString(3, "Hyderabad");
pstmt.setString(1, "Kalyan"); pstmt.setInt(2, 40000); pstmt.setString(3, "Vishakhapatnam");
pstmt.setString(1, "Renuka"); pstmt.setInt(2, 50000); pstmt.setString(3, "Delhi");
pstmt.setString(1, "Archana"); pstmt.setInt(2, 15000); pstmt.setString(3, "Mumbai");

এক্সিকিউশন মেথড

  • execute() - যেকোনো SQL, রিটার্ন boolean
  • executeQuery() - SELECT, রিটার্ন ResultSet
  • executeUpdate() - INSERT/UPDATE/DELETE, রিটার্ন int (row count)

সম্পূর্ণ উদাহরণ

String query = "INSERT INTO Employees(Name, Salary, Location) VALUES (?, ?, ?)";
PreparedStatement pstmt = con.prepareStatement(query);
pstmt.setString(1, "Amit"); pstmt.setInt(2, 30000); pstmt.setString(3, "Hyderabad");
pstmt.setString(1, "Kalyan"); pstmt.setInt(2, 40000); pstmt.setString(3, "Vishakhapatnam");
pstmt.setString(1, "Renuka"); pstmt.setInt(2, 50000); 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: " + num);
Connection established......
Number of rows inserted: 1

নোট: উপরের উদাহরণে প্রতিবার এক্সিকিউট করা হয়নি, শুধু শেষ সেটের মানই ইনসার্ট হয়েছে (১ রো)। সঠিকভাবে করতে হলে প্রতিটি সেটের পর addBatch() কল করে শেষে executeBatch() করুন। ব্লক বা ব্যাচ এক্সিকিউশন খুব দ্রুত।

ব্যাচ প্রসেসিং উদাহরণ

pstmt.setString(1, "Amit"); pstmt.setInt(2, 30000); pstmt.setString(3, "Hyderabad"); pstmt.addBatch();
pstmt.setString(1, "Kalyan"); pstmt.setInt(2, 40000); pstmt.setString(3, "Vishakhapatnam"); pstmt.addBatch();
// ... more
int[] counts = pstmt.executeBatch(); // সবই একসাথে এক্সিকিউট
  1. MySQL JDBC ড্রাইভার কানেকশন স্ট্রিং কী?

  2. MySQL-এ SET কলামে +0 অপারেটর: সেট মানকে ইন্টিজারে রূপান্তর

  3. C#-এ 'using' স্টেটমেন্টের ব্যবহার কী?

  4. C#-এ finally স্টেটমেন্ট কী?