JDBC (Java Database Connectivity) একটি Java API যা Java অ্যাপ্লিকেশনগুলিকে ডেটাবেসের সাথে যোগাযোগ স্থাপন এবং ডেটাবেস অপারেশন সম্পাদন করতে সক্ষম করে। ডেটাবেসে বড় আকারের ডেটা যেমন ইমেজ, অডিও, ভিডিও, এবং বড় টেক্সট ডেটা সংরক্ষণ করতে LOB (Large Object) ব্যবহৃত হয়। BLOB (Binary Large Object) এবং CLOB (Character Large Object) হল LOB ডেটা টাইপ যা ডেটাবেসে বড় আকারের বাইনারি ডেটা এবং বড় টেক্সট ডেটা সংরক্ষণ করতে ব্যবহৃত হয়।
এই গাইডে, আমরা BLOB (Binary Large Object) এবং CLOB (Character Large Object) সংরক্ষণ এবং রিট্রাইভ করার জন্য JDBC ব্যবহার করার পদ্ধতি নিয়ে আলোচনা করব।
1. LOB (Large Object) Handling Overview
BLOB এবং CLOB ডেটা টাইপগুলো ব্যবহার করা হয় ডেটাবেসে বড় আকারের ডেটা (যেমন ছবি, ভিডিও, বড় টেক্সট) সংরক্ষণের জন্য। BLOB সাধারণত বাইনারি ডেটা (যেমন ছবি, অডিও, ভিডিও) সংরক্ষণ করতে ব্যবহৃত হয়, এবং CLOB সাধারণত বড় টেক্সট ডেটা (যেমন HTML, XML, JSON) সংরক্ষণ করতে ব্যবহৃত হয়।
LOB Types:
- BLOB (Binary Large Object): এটি বাইনারি ডেটা যেমন ছবি, অডিও বা ভিডিও সংরক্ষণ করতে ব্যবহৃত হয়।
- CLOB (Character Large Object): এটি টেক্সট ডেটা (যেমন XML, HTML, অথবা সাধারণ বড় টেক্সট) সংরক্ষণ করতে ব্যবহৃত হয়।
2. BLOB (Binary Large Object) Handling
BLOB ডেটা ডেটাবেসে সংরক্ষণ করা
BLOB ডেটা সংরক্ষণের জন্য, আপনি ডেটাবেসে BLOB টাইপ কলাম তৈরি করতে পারেন এবং তারপর JDBC এর মাধ্যমে ডেটা ইনসার্ট করতে পারেন। ডেটাবেসে BLOB ডেটা সংরক্ষণ করতে PreparedStatement ব্যবহার করতে হবে, এবং setBinaryStream() মেথডের মাধ্যমে বাইনারি ডেটা পাঠাতে হবে।
উদাহরণ: BLOB ডেটা সংরক্ষণ করা (Image Example)
import java.sql.*;
import java.io.*;
public class BLOBInsertExample {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement statement = null;
try {
// ডেটাবেসে সংযোগ স্থাপন
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");
// SQL Query তৈরি করা
String query = "INSERT INTO images (image_data) VALUES (?)";
statement = connection.prepareStatement(query);
// BLOB ডেটা ইনসার্ট করতে একটি FileInputStream ব্যবহার করা
File imageFile = new File("path_to_image.jpg");
FileInputStream inputStream = new FileInputStream(imageFile);
// BLOB ডেটা প্রস্তুত করা
statement.setBinaryStream(1, inputStream, (int) imageFile.length());
// ডেটাবেসে ইনসার্ট করা
int rowsAffected = statement.executeUpdate();
System.out.println("Rows affected: " + rowsAffected);
} catch (SQLException | IOException e) {
e.printStackTrace();
} finally {
try {
if (statement != null) statement.close();
if (connection != null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
কোড ব্যাখ্যা:
- setBinaryStream(): বাইনারি ডেটা ইনপুট করার জন্য
setBinaryStream()মেথড ব্যবহার করা হয়েছে, যেখানে প্রথম প্যারামিটার হল ইনডেক্স, দ্বিতীয় প্যারামিটার হল ইনপুট স্ট্রিম, এবং তৃতীয় প্যারামিটার হল ডেটার দৈর্ঘ্য। - executeUpdate(): ইনসার্ট কুইরি চালানোর জন্য executeUpdate() ব্যবহার করা হয়েছে।
3. CLOB (Character Large Object) Handling
CLOB ডেটা ডেটাবেসে সংরক্ষণ করা
CLOB ডেটা সংরক্ষণ করার জন্য, আপনি ডেটাবেসে CLOB টাইপ কলাম তৈরি করতে পারেন এবং তারপর JDBC এর মাধ্যমে বড় টেক্সট ডেটা ইনসার্ট করতে পারেন। CLOB ডেটা ইনসার্ট করার জন্য, PreparedStatement এর setClob() মেথড ব্যবহার করতে হবে।
উদাহরণ: CLOB ডেটা সংরক্ষণ করা (Text Example)
import java.sql.*;
import java.io.*;
public class CLOBInsertExample {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement statement = null;
try {
// ডেটাবেসে সংযোগ স্থাপন
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");
// SQL Query তৈরি করা
String query = "INSERT INTO documents (document_data) VALUES (?)";
statement = connection.prepareStatement(query);
// CLOB ডেটা ইনসার্ট করতে একটি FileReader ব্যবহার করা
File textFile = new File("path_to_text_file.txt");
FileReader reader = new FileReader(textFile);
// CLOB ডেটা প্রস্তুত করা
statement.setCharacterStream(1, reader, (int) textFile.length());
// ডেটাবেসে ইনসার্ট করা
int rowsAffected = statement.executeUpdate();
System.out.println("Rows affected: " + rowsAffected);
} catch (SQLException | IOException e) {
e.printStackTrace();
} finally {
try {
if (statement != null) statement.close();
if (connection != null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
কোড ব্যাখ্যা:
- setCharacterStream(): CLOB ডেটা ইনপুট করার জন্য setCharacterStream() মেথড ব্যবহার করা হয়েছে, যেখানে প্রথম প্যারামিটার হল ইনডেক্স, দ্বিতীয় প্যারামিটার হল ইনপুট স্ট্রিম, এবং তৃতীয় প্যারামিটার হল ডেটার দৈর্ঘ্য।
- executeUpdate(): SQL কুইরি চালানোর জন্য executeUpdate() ব্যবহার করা হয়েছে।
4. BLOB এবং CLOB ডেটা রিট্রাইভ করা
BLOB ডেটা রিট্রাইভ করা
BLOB ডেটা রিট্রাইভ করতে, getBinaryStream() মেথড ব্যবহার করা হয়, যা একটি বাইনারি স্ট্রিম রিটার্ন করে। এই স্ট্রিমের মাধ্যমে আপনি ডেটা রিড করতে পারবেন।
উদাহরণ: BLOB ডেটা রিট্রাইভ করা (Image Example)
import java.sql.*;
import java.io.*;
public class BLOBRetrieveExample {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
// ডেটাবেসে সংযোগ স্থাপন
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");
// SQL Query তৈরি করা
String query = "SELECT image_data FROM images WHERE id = ?";
statement = connection.prepareStatement(query);
statement.setInt(1, 1);
// কোয়েরি চালানো
resultSet = statement.executeQuery();
if (resultSet.next()) {
// BLOB ডেটা রিট্রাইভ করা
InputStream inputStream = resultSet.getBinaryStream("image_data");
// ডেটা প্রক্রিয়া করা
FileOutputStream outputStream = new FileOutputStream("output_image.jpg");
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
inputStream.close();
outputStream.close();
System.out.println("Image saved successfully.");
}
} catch (SQLException | IOException e) {
e.printStackTrace();
} finally {
try {
if (resultSet != null) resultSet.close();
if (statement != null) statement.close();
if (connection != null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
CLOB ডেটা রিট্রাইভ করা
CLOB ডেটা রিট্রাইভ করতে, getCharacterStream() মেথড ব্যবহার করা হয়, যা একটি ক্যারেকটার স্ট্রিম রিটার্ন করে। এই স্ট্রিমের মাধ্যমে আপনি টেক্সট ডেটা রিড করতে পারবেন।
উদাহরণ: CLOB ডেটা রিট্রাইভ করা (Text Example)
import java.sql.*;
import java.io.*;
public class CLOBRetrieveExample {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
// ডেটাবেসে সংযোগ স্থাপন
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");
// SQL Query তৈরি করা
String query = "SELECT document_data FROM documents WHERE id = ?";
statement = connection.prepareStatement(query);
statement.setInt(1, 1);
// কোয়েরি চালানো
resultSet = statement.executeQuery();
if (resultSet.next()) {
// CLOB ডেটা রিট্রাইভ করা
Reader reader = resultSet.getCharacterStream("document_data");
// টেক্সট ফাইল রিড করা
BufferedReader bufferedReader = new BufferedReader(reader);
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
bufferedReader.close();
System.out.println("Text file retrieved successfully.");
}
} catch (SQLException | IOException e) {
e.printStackTrace();
} finally {
try {
if (resultSet != null) resultSet.close();
if (statement != null) statement.close();
if (connection != null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
সারাংশ
LOB (Large Object) হল এমন একটি ডেটা টাইপ যা ডেটাবেসে বড় আকারের ডেটা সংরক্ষণ এবং রিট্রাইভ করতে ব্যবহৃত হয়। JDBC ব্যবহার করে আপনি BLOB (Binary Large Object) এবং CLOB (Character Large Object) ডেটা টাইপের মাধ্যমে বাইনারি এবং টেক্সট ডেটা সংরক্ষণ এবং রিট্রাইভ করতে পারেন। setBinaryStream() এবং getBinaryStream() মেথড ব্যবহার করে BLOB ডেটা ইনপুট এবং আউটপুট করা হয়, এবং setCharacterStream() এবং getCharacterStream() মেথড ব্যবহার করে CLOB ডেটা ইনপুট এবং আউটপুট করা হয়।
Read more