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

JDBC-তে প্যারামিটারাইজড ব্যাচ আপডেট কী? উদাহরণসহ ব্যাখ্যা

JDBC প্যারামিটারাইজড ব্যাচ আপডেট

একসাথে একাধিক INSERT, UPDATE বা DELETE কোয়েরি (যা আপডেট কাউন্ট রিটার্ন করে) গ্রুপ করে একবারে এক্সিকিউট করার প্রক্রিয়াকে ব্যাচ আপডেট বলা হয়।

যদি আপনি প্যারামিটারসহ কোয়েরি ব্যাচ আপডেটে ব্যবহার করেন, তবে সেটাকে প্যারামিটারাইজড ব্যাচ আপডেট বলা হয়।

সাধারণ ব্যাচ আপডেট প্রক্রিয়া

সাধারণত ব্যাচ আপডেটের জন্য নিচের পদক্ষেপগুলো অনুসরণ করা হয়:

  1. addBatch() মেথড ব্যবহার করে সমস্ত প্রয়োজনীয় স্টেটমেন্ট যোগ করা
  2. executeBatch() মেথড ব্যবহার করে সেগুলো একসাথে এক্সিকিউট করা
// Statement অবজেক্ট তৈরি
Statement stmt = con.createStatement();

// Auto-commit বন্ধ করা
con.setAutoCommit(false);

// স্টেটমেন্টগুলো ব্যাচে যোগ করা
stmt.addBatch("INSERT INTO Sales VALUES ('KeyBoard', 'Amith', 'January', 1000, 'Hyderabad')");
stmt.addBatch("INSERT INTO Sales VALUES ('Earphones', 'Sumith', 'March', 500, 'Vishakhapatnam')");
stmt.addBatch("INSERT INTO Sales VALUES ('Mouse', 'Sudha', 'September', 200, 'Vijayawada')");

// ব্যাচ এক্সিকিউট করা
stmt.executeBatch();

উপরের কোডে দেখা যাচ্ছে যে, একই কোয়েরির নির্দিষ্ট অংশ বারবার যোগ করা হচ্ছে। এর পরিবর্তে প্যারামিটারাইজড ব্যাচ আপডেটে PreparedStatement ব্যবহার করে প্লেসহোল্ডার (?) সহ কোয়েরি তৈরি করা হয় এবং setter মেথডগুলো দিয়ে মান পাস করা হয়।

প্যারামিটারাইজড ব্যাচ আপডেট তৈরি করার পদ্ধতি

  1. ইনসার্ট, আপডেট বা ডিলিটের জন্য প্লেসহোল্ডারসহ PreparedStatement তৈরি করুন
  2. setXXX() মেথডগুলো ব্যবহার করে প্লেসহোল্ডারগুলোতে মান সেট করুন
  3. প্রতিটি মান সেটের পর addBatch() কল করুন
  4. শেষে executeBatch() কল করে ব্যাচ এক্সিকিউট করুন
গুরুত্বপূর্ণ: স্টেটমেন্ট ব্যাচে যোগ করার আগে con.setAutoCommit(false) দিয়ে অটো-কমিট বন্ধ করতে হবে এবং ব্যাচ এক্সিকিউট করার পর con.commit() দিয়ে পরিবর্তনগুলো সেভ করতে হবে।

উদাহরণ

মান लीজিয়ে ডেটাবেসে নিচের মতো একটি Sales টেবিল আছে:

+-------------------+--------------+------+-----+---------+-------+
| Field             | Type         | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+-------+
| Product_Name      | varchar(255) | YES  |     | NULL    |       |
| Name_Of_Customer  | varchar(255) | YES  |     | NULL    |       |
| Month_Of_Dispatch | varchar(255) | YES  |     | NULL    |       |
| Price             | int(11)      | YES  |     | NULL    |       |
| Location          | varchar(255) | YES  |     | NULL    |       |
+-------------------+--------------+------+-----+---------+-------+

এই উদাহরণে প্যারামিটারাইজড ব্যাচ আপডেট ব্যবহার করে টেবিলে ডেটা ইনসার্ট করা হয়েছে:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;

public class ParameterizedBatchUpdate {
    public static void main(String args[]) throws Exception {
        // ডেটাবেস কানেকশন
        String mysqlUrl = "jdbc:mysql://localhost/testDB";
        Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
        System.out.println("Connection established......");

        // Statement অবজেক্ট তৈরি
        Statement stmt = con.createStatement();

        // অটো-কমিট বন্ধ করা
        con.setAutoCommit(false);

        // PreparedStatement তৈরি প্লেসহোল্ডারসহ
        PreparedStatement pstmt = con.prepareStatement("INSERT INTO Sales VALUES (?, ?, ?, ?, ?)");

        // প্রথম রেকর্ডের মান সেট করে ব্যাচে যোগ করা
        pstmt.setString(1, "KeyBoard");
        pstmt.setString(2, "Amith");
        pstmt.setString(3, "January");
        pstmt.setInt(4, 1000);
        pstmt.setString(5, "Hyderabad");
        pstmt.addBatch();

        // দ্বিতীয় রেকর্ডের মান সেট করে ব্যাচে যোগ করা
        pstmt.setString(1, "Earphones");
        pstmt.setString(2, "Sumith");
        pstmt.setString(3, "March");
        pstmt.setInt(4, 500);
        pstmt.setString(5, "Vishakhapatnam");
        pstmt.addBatch();

        // তৃতীয় রেকর্ডের মান সেট করে ব্যাচে যোগ করা
        pstmt.setString(1, "Mouse");
        pstmt.setString(2, "Sudha");
        pstmt.setString(3, "September");
        pstmt.setInt(4, 500);
        pstmt.setString(5, "Vishakhapatnam");
        pstmt.addBatch();

        // ব্যাচ এক্সিকিউট করা
        stmt.executeBatch();

        // পরিবর্তনগুলো কমিট করা
        con.commit();
        System.out.println("Records inserted......");
    }
}

আউটপুট

Connection established......
Records inserted......

প্যারামিটারাইজড ব্যাচ আপডেটের সুবিধা

  • SQL ইনজেকশন প্রতিরোধ: প্লেসহোল্ডার ব্যবহার করলে SQL ইনজেকশনের ঝুঁকি থাকে না
  • পারফরম্যান্স: একই কোয়েরি বারবার পার্স করতে হয় না, ডেটাবেস একবার প্ল্যান তৈরি করে রিইউজ করে
  • কোড পঠনযোগ্যতা: কোড পরিষ্কার এবং বজায় রাখতে সহজ
  • টাইপ সেফটি: সঠিক ডেটা টাইপ সেটার জন্য কম্পাইল টাইম চেকিং
  1. জাভাস্ক্রিপ্টে ডিপ ক্লোনিং অবজেক্ট উদাহরণসহ ব্যাখ্যা

  2. সি ভাষায় কনস্ট্যান্ট (Constant) কী এবং উদাহরণ

  3. সি ভাষায় volatile এবং restrict টাইপ কোয়ালিফায়ার উদাহরণসহ ব্যাখ্যা

  4. ইমেজ অ্যারে কী? C++-এ উদাহরণসহ ব্যাখ্যা