JDBC Statement, PreparedStatement, এবং CallableStatement এর ব্যবহার

Database Tutorials - অ্যাপাচি ডার্বি (Apache Derby) JDBC এর সাথে Apache Derby ব্যবহার |
206
206

Java Database Connectivity (JDBC) হল Java API যা ডেটাবেসের সঙ্গে যোগাযোগ করতে সাহায্য করে। JDBC-তে ডেটাবেসের সাথে SQL কুয়েরি চালানোর জন্য তিনটি প্রধান ধরণের Statement ব্যবহৃত হয়: Statement, PreparedStatement, এবং CallableStatement। প্রতিটিরই আলাদা ব্যবহার এবং সুবিধা রয়েছে।


1. Statement

Statement হল JDBC-তে SQL কুয়েরি চালানোর জন্য সাধারণত ব্যবহৃত ক্লাস। এটি ডেটাবেসে SQL স্টেটমেন্ট এক্সিকিউট করতে ব্যবহৃত হয় এবং এটি SQL কুয়েরি তৈরি করার জন্য কোনো প্রি-কনফিগারেশন বা প্যারামিটারাইজেশন করতে দেয় না।

ব্যবহার:

  • Statement ব্যবহারের জন্য SQL কুয়েরি রান করার সময় কুয়েরি টেক্সট সরাসরি পাস করতে হয়।
  • এটি সাধারণত ডাইনামিক কুয়েরি বা পরিবর্তনশীল কুয়েরি প্রক্রিয়া করার জন্য উপযুক্ত নয়।

কোড উদাহরণ:

import java.sql.*;

public class StatementExample {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            // ডেটাবেস কানেকশন তৈরি
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");
            
            // Statement তৈরি
            stmt = conn.createStatement();
            
            // SQL কুয়েরি রান করা
            String query = "SELECT * FROM employee";
            rs = stmt.executeQuery(query);

            // রেজাল্ট প্রসেস করা
            while (rs.next()) {
                System.out.println("Employee ID: " + rs.getInt("id"));
                System.out.println("Employee Name: " + rs.getString("name"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (rs != null) rs.close();
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

সুবিধা:

  • সহজ এবং দ্রুত SQL কুয়েরি চালানোর জন্য ব্যবহার করা যায়।
  • ছোট বা একক কুয়েরি পরিচালনা করতে উপযুক্ত।

অসুবিধা:

  • SQL ইনজেকশন আক্রমণ (SQL Injection) হতে পারে।
  • কুয়েরি প্রতি নতুন স্টেটমেন্ট তৈরি করা হয়, যা পারফরম্যান্সের জন্য উপকারী নয়।

2. PreparedStatement

PreparedStatement হল একটি উন্নত সংস্করণ যা SQL কুয়েরি নিরাপদভাবে এবং অধিক কার্যকরভাবে চালাতে সহায়তা করে। এতে SQL কুয়েরি তৈরি করার সময় প্যারামিটারাইজেশন (parameterization) করা যায়, যা SQL ইনজেকশন প্রতিরোধ করে এবং কোডের পুনরাবৃত্তি কমায়।

ব্যবহার:

  • SQL কুয়েরি এবং প্যারামিটার একবার কম্পাইল হয় এবং পুনরায় ব্যবহার করা যায়, ফলে এটি performance optimization সহায়তা করে।
  • এটি SQL ইনজেকশন থেকে রক্ষা পায়, কারণ ইউজার ইনপুট প্যারামিটার হিসেবে সুরক্ষিতভাবে ইনজেক্ট করা হয়।

কোড উদাহরণ:

import java.sql.*;

public class PreparedStatementExample {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        try {
            // ডেটাবেস কানেকশন তৈরি
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");

            // PreparedStatement তৈরি
            String query = "SELECT * FROM employee WHERE id = ?";
            pstmt = conn.prepareStatement(query);
            
            // প্যারামিটার সেট করা
            pstmt.setInt(1, 101);
            
            // কুয়েরি রান করা
            rs = pstmt.executeQuery();

            // রেজাল্ট প্রসেস করা
            while (rs.next()) {
                System.out.println("Employee ID: " + rs.getInt("id"));
                System.out.println("Employee Name: " + rs.getString("name"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (rs != null) rs.close();
                if (pstmt != null) pstmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

সুবিধা:

  • SQL Injection প্রতিরোধ করে, কারণ প্যারামিটারগুলি এক্সিকিউট করার আগে সেফলি ইনজেক্ট করা হয়।
  • পুনরাবৃত্তি কোড কমানো এবং দ্রুত পারফরম্যান্স প্রদান।
  • এটি বড় এবং কমপ্লেক্স কুয়েরির জন্য উপযুক্ত।

অসুবিধা:

  • একবার প্রস্তুত হওয়া কুয়েরির পরিবর্তন বা কাস্টমাইজেশন কিছুটা কঠিন হতে পারে।

3. CallableStatement

CallableStatement ব্যবহার করা হয় যখন আপনি SQL স্টোরড প্রোসিডিউর বা ফাংশন কল করতে চান। এটি SQL স্টেটমেন্টের মতো কাজ করে, তবে এটি স্টোরড প্রোসিডিউর বা ফাংশনকে কল করতে ব্যবহৃত হয়, যা সাধারণত ডেটাবেস সাইডে নির্দিষ্ট লজিক বা ফাংশনালিটি বাস্তবায়ন করে।

ব্যবহার:

  • SQL স্টোরড প্রোসিডিউর এবং ফাংশন চালাতে এটি ব্যবহার করা হয়।
  • এটি ইনপুট এবং আউটপুট প্যারামিটার সহ স্টোরড প্রোসিডিউর কল করতে সক্ষম।

কোড উদাহরণ:

import java.sql.*;

public class CallableStatementExample {
    public static void main(String[] args) {
        Connection conn = null;
        CallableStatement cstmt = null;
        ResultSet rs = null;

        try {
            // ডেটাবেস কানেকশন তৈরি
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");

            // স্টোরড প্রোসিডিউর কল করার জন্য CallableStatement তৈরি
            String query = "{call getEmployeeDetails(?)}";
            cstmt = conn.prepareCall(query);
            
            // ইনপুট প্যারামিটার সেট করা
            cstmt.setInt(1, 101);
            
            // স্টোরড প্রোসিডিউর রান করা
            rs = cstmt.executeQuery();

            // রেজাল্ট প্রসেস করা
            while (rs.next()) {
                System.out.println("Employee ID: " + rs.getInt("id"));
                System.out.println("Employee Name: " + rs.getString("name"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (rs != null) rs.close();
                if (cstmt != null) cstmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

সুবিধা:

  • স্টোরড প্রোসিডিউর এবং ফাংশন কল করার জন্য ব্যবহৃত হয়।
  • ডেটাবেসের লজিক বা কমপ্লেক্স অপারেশন এক্সিকিউট করার জন্য উপযুক্ত।
  • আউটপুট প্যারামিটারও হ্যান্ডেল করতে সক্ষম।

অসুবিধা:

  • স্টোরড প্রোসিডিউর বা ফাংশন ডাটাবেস সাইডে আগে থেকেই থাকতে হবে।
  • তাতে কিছুটা কনফিগারেশন বা নির্দিষ্ট ডেটাবেস স্কিমার প্রয়োজন।

সারাংশ

  • Statement সাধারণ SQL কুয়েরি রান করতে ব্যবহৃত হয়, তবে এটি SQL ইনজেকশন বা পুনরাবৃত্তি সমস্যা সৃষ্টি করতে পারে।
  • PreparedStatement নিরাপদ এবং কার্যকর উপায়ে SQL কুয়েরি চালাতে ব্যবহৃত হয়, যা SQL ইনজেকশন থেকে রক্ষা করে এবং পুনরাবৃত্তি কমায়।
  • CallableStatement স্টোরড প্রোসিডিউর বা ফাংশন কল করতে ব্যবহৃত হয়, যা ডেটাবেসের সাথে ইন্টিগ্রেটেড লজিক বা কমপ্লেক্স অপারেশন এক্সিকিউট করে।
common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion