একটি BLOB (Binary Large Object) হলো একটি বাইনারি বড় অবজেক্ট যা পরিবর্তনশীল পরিমাণ ডেটা ধারণ করতে পারে সর্বোচ্চ ৬৫,৫৩৫ ক্যারেক্টার পর্যন্ত।
এগুলো বড় পরিমাণ বাইনারি ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়—যেমন ছবি বা অন্যান্য ফাইল টাইপ। TEXT ডেটা টাইপও বড় পরিমাণ ডেটা ধারণ করে। পার্থক্য হলো BLOB-এ সোর্ট ও কম্পারেশন কেস-সেনসিটিভ, TEXT-এ কেস-ইনসেনসিটিভ। BLOB বা TEXT-এ দৈর্ঘ্য নির্দিষ্ট করা লাগে না।
ডেটাবেসে Blob সংরক্ষণ
JDBC প্রোগ্রাম ব্যবহার করে Blob ডেটা টাইপ ডেটাবেসে সংরক্ষণ করার ধাপসমূহ:
ধাপ ১: ডেটাবেসের সাথে কানেক্ট করুন
DriverManager ক্লাসের getConnection() মেথড ব্যবহার করে ডেটাবেসের সাথে কানেক্ট করুন। MySQL URL jdbc:mysql://localhost/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 MyTable VALUES(?, ?)");
ধাপ ৩: প্লেসহোল্ডারগুলোর মান সেট করুন
PreparedStatement ইন্টারফেসের setter মেথডগুলো ব্যবহার করে মান সেট করুন। Blob টাইপের জন্য setBinaryStream() বা setBlob() মেথড ব্যবহার করুন। প্যারামিটার হিসেবে প্লেসহোল্ডার ইনডেক্স (ইন্টিজার) এবং InputStream ক্লাসের অবজেক্ট পাস করুন।
pstmt.setString(1, "sample image");
// Inserting Blob type
InputStream in = new FileInputStream("E:\\images\\cat.jpg");
pstmt.setBlob(2, in);
ধাপ ৪: স্টেটমেন্ট এক্সিকিউট করুন
PreparedStatement ইন্টারফেসের execute() মেথড ব্যবহার করে এক্সিকিউট করুন।
ডেটাবেস থেকে Blob বের করা
ResultSet ইন্টারফেসের getBlob() মেথড একটি ইন্টিজার (কলাম ইনডেক্স) বা স্ট্রিং (কলাম নাম) গ্রহণ করে নির্দিষ্ট কলামের মান বের করে এবং Blob অবজেক্ট হিসেবে রিটার্ন করে।
while(rs.next()) {
rs.getString("Name");
rs.getString("Type");
Blob blob = rs.getBlob("Logo");
}
Blob ইন্টারফেসের getBytes() মেথড বর্তমান Blob অবজেক্টের কনটেন্ট বের করে বাইট অ্যারে হিসেবে রিটার্ন করে।
getBlob() মেথড ব্যবহার করে Blob-এর কনটেন্ট বাইট অ্যারেতে পেয়ে FileOutputStream-এর write() মেথড ব্যবহার করে ছবি তৈরি করা যায়।
byte byteArray[] = blob.getBytes(1, (int)blob.length());
FileOutputStream outPutStream = new FileOutputStream("path");
outPutStream.write(byteArray);
উদাহরণ
নিচের উদাহরণ MySQL ডেটাবেসে blob ডেটা টাইপসহ একটি টেবিল তৈরি করে, ছবি ইনসার্ট করে, তা বের করে লোকাল ফাইল সিস্টেমে সংরক্ষণ করে।
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
public class BlobExample {
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 SampleTable( Name VARCHAR(255), Image BLOB)");
System.out.println("Table Created");
// মান ইনসার্ট
String query = "INSERT INTO SampleTable(Name,image) VALUES (?, ?)";
PreparedStatement pstmt = con.prepareStatement(query);
pstmt.setString(1, "sample image");
FileInputStream fin = new FileInputStream("E:\\images\\cat.jpg");
pstmt.setBlob(2, fin);
pstmt.execute();
// ডেটা বের করা
ResultSet rs = stmt.executeQuery("select * from SampleTable");
int i = 1;
System.out.println("Contents of the table are: ");
while (rs.next()) {
System.out.println(rs.getString("Name"));
Blob blob = rs.getBlob("Image");
byte byteArray[] = blob.getBytes(1, (int)blob.length());
FileOutputStream outPutStream = new FileOutputStream("E:\\images\\blob_output" + i + ".jpg");
outPutStream.write(byteArray);
System.out.println("E:\\images\\blob_output" + i + ".jpg");
System.out.println();
i++;
}
}
}
আউটপুট
Connection established...... Table Created Contents of the table are: sample image E:\images\blob_output1.jpg