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

JDBC Clob ডেটা টাইপ কী? এতে ডেটা কীভাবে স্টোর ও পড়বেন?


CLOB (Character Large Object) হলো একটি বিল্ট-ইন SQL ডেটা টাইপ যা বড় পরিমাণ টেক্সটুয়াল ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়। এই ডেটা টাইপ ব্যবহার করে ২,১৪৭,৪৮৩,৬৪৭ ক্যারেক্টার পর্যন্ত ডেটা সংরক্ষণ করা যায়।

JDBC API-এর java.sql.Clob ইন্টারফেস CLOB ডেটা টাইপকে প্রতিনিধিত্ব করে। যেহেতু JDBC-তে Clob অবজেক্ট SQL লোকেটর ব্যবহার করে ইমপ্লিমেন্ট করা হয়, এটি SQL CLOB-এর একটি লজিক্যাল পয়েন্টার ধারণ করে (ডেটা নয়)।

MYSQL ডেটাবেস এই ডেটা টাইপকে চারটি ভেরিয়েবল দিয়ে সাপোর্ট করে:

  • TINYTEXT: সর্বোচ্চ ২⁸-১ (২৫৫) ক্যারেক্টার সহ CLOB টাইপ।

  • TEXT: সর্বোচ্চ ২¹⁶-১ (৬৫,৫৩৫) ক্যারেক্টার সহ CLOB টাইপ।

  • MEDIUMTEXT: সর্বোচ্চ ২²⁴-১ (১৬,৭৭৭,২১৫) ক্যারেক্টার সহ CLOB টাইপ।

  • LONGTEXT: সর্বোচ্চ ২³²-১ (৪,২৯৪,৯৬৭,২৯৫) ক্যারেক্টার সহ CLOB টাইপ।

ডেটাবেসে Clob ডেটা টাইপ সংরক্ষণ

JDBC প্রোগ্রাম ব্যবহার করে Clob ডেটা টাইপ ডেটাবেসে সংরক্ষণ করার ধাপসমূহ:

ধাপ ১: ডেটাবেসের সাথে কানেক্ট করুন

DriverManager ক্লাসের getConnection() মেথড ব্যবহার করে ডেটাবেসের সাথে কানেক্ট করুন। MySQL URL jdbc:mysql://localhost/sampleDB (sampleDB হল ডেটাবেসের নাম), ইউজারনেম ও পাসওয়ার্ড পাস করুন।

String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; 
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");

ধাপ ২: Prepared Statement তৈরি করুন

Connection ইন্টারফেসের prepareStatement() মেথড ব্যবহার করে PreparedStatement অবজেক্ট তৈরি করুন। ইনসার্ট কোয়েরি (প্লেসহোল্ডারসহ) পাস করুন।

PreparedStatement pstmt = con.prepareStatement("INSERT INTO Technologies(Name, Type, Article ) VALUES (?, ?, ?)");

ধাপ ৩: প্লেসহোল্ডারগুলোর মান সেট করুন

PreparedStatement ইন্টারফেসের setter মেথডগুলো ব্যবহার করে মান সেট করুন। Clob টাইপের জন্য setCharacterStream() বা setClob() মেথড ব্যবহার করুন। প্যারামিটার হিসেবে প্লেসহোল্ডার ইনডেক্স (ইন্টিজার) এবং Reader ক্লাসের অবজেক্ট পাস করুন।

pstmt.setString(1, "JavaFX"); 
pstmt.setString(2, "Java Library"); 
FileReader reader = new FileReader("E:\\images\\javafx.txt"); 
pstmt.setClob(3, reader); 
pstmt.execute();

ধাপ ৪: স্টেটমেন্ট এক্সিকিউট করুন

PreparedStatement ইন্টারফেসের execute() মেথড ব্যবহার করে এক্সিকিউট করুন।

ডেটাবেস থেকে Blob বের করা

ResultSet ইন্টারফেসের getClob() মেথড একটি ইন্টিজার (কলাম ইনডেক্স) বা স্ট্রিং (কলাম নাম) গ্রহণ করে নির্দিষ্ট কলামের মান বের করে এবং Clob অবজেক্ট হিসেবে রিটার্ন করে।

while(rs.next()) { 
    System.out.println(rs.getString("Name")); 
    System.out.println(rs.getString("Type")); 
    Clob clob = rs.getClob("Article"); 
}

Clob ইন্টারফেসের getCharacterStream() মেথড বর্তমান Clob অবজেক্টের কনটেন্ট বের করে Reader অবজেক্ট হিসেবে রিটার্ন করে।

getClob() মেথড ব্যবহার করে Clob-এর কনটেন্ট Reader অবজেক্ট হিসেবে পেয়ে write() মেথড ব্যবহার করে টেক্সট ফাইল তৈরি করা যায়।

Reader r = clob.getCharacterStream(); 
char cbuf[] = new char[r.read()]; 
r.read(cbuf); 
FileOutputStream outPutStream = new FileOutputStream("E:\\images\\clob_output" + i + ".txt"); 
outPutStream.write(cbuf.toString().getBytes());

উদাহরণ

নিচের উদাহরণ MySQL ডেটাবেসে Clob ডেটা টাইপসহ একটি টেবিল তৈরি করে, ফাইল থেকে বড় টেক্সট ডেটা ইনসার্ট করে, টেক্সট বের করে অন্য টেক্সট ফাইলে সংরক্ষণ করে।

import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.Reader; 
import java.sql.Clob; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.Statement; 

public class ClobExample { 
    public static void main(String args[]) throws Exception { 
        // ড্রাইভার রেজিস্টার 
        DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 
        // কানেকশন 
        String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; 
        Connection con = DriverManager.getConnection(mysqlUrl, "root", "password"); 
        System.out.println("Connection established......"); 
        // টেবিল তৈরি 
        Statement stmt = con.createStatement(); 
        stmt.execute("CREATE TABLE Technologies( Name VARCHAR(255), Type VARCHAR(255), Article LONGTEXT)"); 
        System.out.println("Table Created......"); 
        // মান ইনসার্ট 
        String query = "INSERT INTO Technologies(Name, Type, Article ) VALUES (?, ?, ?)"; 
        PreparedStatement pstmt = con.prepareStatement(query); 
        pstmt.setString(1, "JavaFX"); 
        pstmt.setString(2, "Java Library"); 
        FileReader reader = new FileReader("E:\\images\\javafx.txt"); 
        pstmt.setClob(3, reader); 
        pstmt.execute(); 
        pstmt.setString(1, "CoffeeScript"); 
        pstmt.setString(2, "Scripting Language"); 
        reader = new FileReader("E:\\images\\coffeescript.txt"); 
        pstmt.setClob(3, reader); 
        pstmt.execute(); 
        pstmt.setString(1, "Cassandra"); 
        pstmt.setString(2, "NoSQL Database"); 
        reader = new FileReader("E:\\images\\cassandra.txt"); 
        pstmt.setClob(3, reader); 
        pstmt.execute(); 
        // ডেটা বের করা 
        ResultSet rs = stmt.executeQuery("select * from Technologies"); 
        int j = 0; 
        System.out.println("Contents of the table are: "); 
        while (rs.next()) { 
            System.out.println(rs.getString("Name")); 
            Clob clob = rs.getClob("Article"); 
            Reader r = clob.getCharacterStream(); 
            String filePath = "E:\\Data\\clob_output" + j + ".txt"; 
            FileWriter writer = new FileWriter(filePath); 
            int i; 
            while ((i = r.read()) != -1) { 
                writer.write(i); 
            } 
            writer.close(); 
            System.out.println(filePath); 
            j++; 
        } 
    } 
}

আউটপুট

Connection established...... 
Table Created...... 
Contents of the table are: 
JavaFX 
Java Library 
E:\images\clob_output1.txt 
CoffeeScript 
Scripting Language 
E:\images\clob_output2.txt 
Cassandra 
NoSQL Database 
E:\images\clob_output3.txt

  1. JDBC-তে ResultSet কী? ResultSet অবজেক্ট থেকে ডেটা কীভাবে বের করবেন?

  2. JDBC ব্যবহার করে ডেটাবেস থেকে ফাইল কীভাবে বের করবেন?

  3. Windows Server কী এবং এটি সাধারণ Windows থেকে কিভাবে ভিন্ন

  4. AirDrop: ম্যাক, আইফোন, আইপ্যাডের মধ্যে সুরক্ষিত, তৎক্ষণ ফাইল শেয়ারিং