Java Technologies PreparedStatement এর মাধ্যমে Query Parameter Binding করা গাইড ও নোট

239

JDBC (Java Database Connectivity) ব্যবহার করে ডেটাবেসে ডেটা প্রক্রিয়া করার সময়, PreparedStatement একটি অত্যন্ত গুরুত্বপূর্ণ উপাদান। এটি SQL Injection প্রতিরোধ করতে সহায়তা করে এবং ডেটাবেসে parameterized queries চালাতে ব্যবহৃত হয়। PreparedStatement এর মাধ্যমে আপনি ডায়নামিকভাবে SQL কুইরিতে প্যারামিটার প্রদান করতে পারেন, যার ফলে কোডটি নিরাপদ এবং কার্যকরী হয়।

1. PreparedStatement কী?

PreparedStatement হল Statement এর একটি উন্নত সংস্করণ যা SQL কুইরি প্রিপেয়ারড স্টেটমেন্টের মাধ্যমে ডেটাবেসে পাঠাতে সাহায্য করে। এটি SQL কুইরি এবং ডেটা আলাদা রাখে, এবং SQL কুইরি একবার প্রস্তুত করার পর একাধিকবার চালানো যেতে পারে।

PreparedStatement ডেটাবেসের সাথে ইন্টারঅ্যাকশন করার সময় parameterized queries ব্যবহার করতে সহায়তা করে। এর মাধ্যমে আপনি SQL ইনজেকশন প্রতিরোধ করতে পারেন এবং কার্যকরী কোড তৈরি করতে পারেন।


2. PreparedStatement এর মাধ্যমে Query Parameter Binding

JDBC-এ PreparedStatement ব্যবহার করে প্যারামিটারাইজড কুইরি তৈরি করতে, SQL কুইরিতে প্লেসহোল্ডার (?) ব্যবহার করা হয় এবং এই প্লেসহোল্ডারের মান setXXX() মেথডের মাধ্যমে বেঁধে দেওয়া হয়।

2.1. PreparedStatement এর সাধারণ ব্যবহার

উদাহরণ: INSERT কুইরি এর মাধ্যমে PreparedStatement ব্যবহার

ধরা যাক আমাদের একটি Employee টেবিল আছে যেখানে id, name, এবং salary নামক কলাম রয়েছে। আমরা INSERT কুইরি চালাতে চাই যেখানে প্যারামিটার বাইন্ডিং করতে হবে।

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) {
        // ডেটাবেস সংযোগের তথ্য
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";

        // SQL কুইরি যা PreparedStatement এর মাধ্যমে চলবে
        String sql = "INSERT INTO employees (id, name, salary) VALUES (?, ?, ?)";

        try (Connection conn = DriverManager.getConnection(url, username, password)) {
            // PreparedStatement তৈরি করা
            PreparedStatement stmt = conn.prepareStatement(sql);

            // প্যারামিটার বেঁধে দেওয়া
            stmt.setInt(1, 101);  // id প্যারামিটার
            stmt.setString(2, "John Doe");  // name প্যারামিটার
            stmt.setDouble(3, 50000.00);  // salary প্যারামিটার

            // কুইরি এক্সিকিউট করা
            int rowsAffected = stmt.executeUpdate();
            System.out.println("Rows affected: " + rowsAffected);

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  1. SQL Query: INSERT INTO employees (id, name, salary) VALUES (?, ?, ?) কুইরি প্লেসহোল্ডার ? দিয়ে তৈরি করা হয়েছে।
  2. setXXX() Method: setInt(), setString(), এবং setDouble() মেথডের মাধ্যমে প্লেসহোল্ডারে মান বেঁধে দেওয়া হয়েছে।
  3. executeUpdate(): এটি INSERT, UPDATE, অথবা DELETE কুইরি চালানোর জন্য ব্যবহৃত হয়।

3. Different Types of Parameters

JDBC PreparedStatement এর মাধ্যমে বিভিন্ন ধরনের প্যারামিটার বাইন্ড করা যায়, যেমন int, String, float, double, boolean, Date, ইত্যাদি। নিচে কিছু সাধারণ প্যারামিটার বাইন্ডিং দেখানো হলো।

3.1. Setting Parameters for Different Data Types

// Set Integer parameter
stmt.setInt(1, 1001);  // For int (1st parameter)

// Set String parameter
stmt.setString(2, "Jane Doe");  // For String (2nd parameter)

// Set Double parameter
stmt.setDouble(3, 75000.50);  // For double (3rd parameter)

// Set Date parameter
java.sql.Date sqlDate = java.sql.Date.valueOf("2024-12-01");
stmt.setDate(4, sqlDate);  // For Date (4th parameter)

3.2. Setting NULL Value

যেকোনো ডেটাবেস ফিল্ডে NULL ভ্যালু সেট করতে হলে, setNull() মেথড ব্যবহার করতে হয়।

stmt.setNull(5, java.sql.Types.VARCHAR);  // Set NULL for 5th parameter (String)
stmt.setNull(6, java.sql.Types.INTEGER);  // Set NULL for 6th parameter (Integer)

4. Using PreparedStatement for SELECT Queries

PreparedStatement শুধু INSERT, UPDATE, বা DELETE কুইরি চালানোর জন্য নয়, বরং SELECT কুইরি চালানোর জন্যও ব্যবহার করা যেতে পারে। এখানে একটি SELECT কুইরি উদাহরণ দেওয়া হলো।

উদাহরণ: SELECT কুইরি এর মাধ্যমে PreparedStatement ব্যবহার

import java.sql.*;

public class PreparedStatementSelectExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";

        String sql = "SELECT * FROM employees WHERE id = ?";

        try (Connection conn = DriverManager.getConnection(url, username, password)) {
            // PreparedStatement তৈরি করা
            PreparedStatement stmt = conn.prepareStatement(sql);
            
            // প্যারামিটার বেঁধে দেওয়া
            stmt.setInt(1, 101);  // Searching for employee with ID 101

            // কুইরি এক্সিকিউট করা
            ResultSet rs = stmt.executeQuery();

            // রেজাল্ট সেট প্রক্রিয়া করা
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                double salary = rs.getDouble("salary");
                System.out.println("Employee ID: " + id + ", Name: " + name + ", Salary: " + salary);
            }

            // রেজাল্টসেট বন্ধ করা
            rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  1. SELECT Query: SELECT * FROM employees WHERE id = ? কুইরি করা হয়েছে, যেখানে id প্যারামিটারকে ডাইনামিকভাবে নির্ধারণ করা হবে।
  2. setInt() Method: প্যারামিটারটি setInt() মেথডের মাধ্যমে নির্ধারণ করা হয়েছে, যেখানে id = 101 ব্যবহার করা হয়েছে।
  3. executeQuery(): SELECT কুইরি চালানোর জন্য executeQuery() মেথড ব্যবহার করা হয়েছে, যা ResultSet রিটার্ন করে।

5. Advantages of Using PreparedStatement

  1. SQL Injection Protection: PreparedStatement SQL ইনজেকশনের বিরুদ্ধে নিরাপত্তা প্রদান করে, কারণ SQL কুইরির মধ্যে ডাইনামিক প্যারামিটার ইন্টারপোলেট করা হয় না।
  2. Performance Optimization: PreparedStatement একবার প্রিপেয়ার করার পর একাধিকবার ব্যবহার করা যায়, যার ফলে পারফরম্যান্স উন্নত হয়।
  3. Code Reusability: একাধিকবার একই কুইরি চালানোর প্রয়োজন হলে কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি পায়।

সারাংশ

PreparedStatement হল JDBC এর একটি শক্তিশালী ফিচার যা ডেটাবেসে প্যারামিটারাইজড কুইরি চালাতে সহায়তা করে। এটি SQL ইনজেকশনের ঝুঁকি কমাতে সহায়ক এবং কোডের পুনঃব্যবহারযোগ্যতা এবং পারফরম্যান্স উন্নত করতে সহায়তা করে। setXXX() মেথড ব্যবহার করে বিভিন্ন ধরনের প্যারামিটার ডাইনামিকভাবে SQL কুইরির মধ্যে প্রদান করা যায়। JDBC এর এই ফিচারটি ডেটাবেস অপারেশনকে নিরাপদ, কার্যকরী, এবং দক্ষ করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...