PreparedStatement ইন্টারফেসের setBinaryStream() মেথড একটি ইন্টিজার (প্যারামিটারের ইনডেক্স) এবং একটি InputStream অবজেক্ট গ্রহণ করে এবং প্যারামিটারকে দেওয়া InputStream অবজেক্টে সেট করে। খুব বড় বাইনারি মান পাঠাতে হলে এই মেথড ব্যবহার করা হয়।
SQL ডেটাবেস Blob (Binary Large Object) নামক একটি ডেটা টাইপ দিয়ে থাকে যেখানে বড় বাইনারি ডেটা যেমন ছবি সংরক্ষণ করা যায়।
JDBC ব্যবহার করে ছবি সংরক্ষণ
JDBC প্রোগ্রাম ব্যবহার করে ডেটাবেসে ছবি সংরক্ষণ করতে Blob ডেটা টাইপসহ একটি টেবিল তৈরি করুন:
CREATE TABLE Tutorial(Name VARCHAR(255), Type INT NOT NULL, Logo BLOB);
এখন JDBC ব্যবহার করে ডেটাবেসের সাথে কানেক্ট করুন এবং উপরের টেবিলে মান ইনসার্ট করার জন্য PreparedStatement প্রস্তুত করুন:
String query = "INSERT INTO Tutorial(Name, Type, Logo) VALUES (?, ?, ?)"; PreparedStatement pstmt = con.prepareStatement(query);
Setter মেথডগুলো ব্যবহার করে প্লেসহোল্ডারগুলোর মান সেট করুন এবং Blob ডেটা টাইপের জন্য setBinaryStream() মেথড ব্যবহার করুন।
FileInputStream fin = new FileInputStream("javafx_logo.jpg");
pstmt.setBinaryStream(3, fin);
উদাহরণ
নিচের উদাহরণ MySQL ডেটাবেসে JDBC ব্যবহার করে ছবি ইনসার্ট করা দেখাচ্ছে। এখানে Blob ডেটা টাইপসহ একটি টেবিল তৈরি করা হয়েছে, মান ইনসার্ট করা হয়েছে (Blob টাইপে BinaryStream অবজেক্ট) এবং টেবিলের কনটেন্ট বের করা হয়েছে।
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class InsertingImageToDatabase {
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 তৈরি
Statement stmt = con.createStatement();
// টেবিল তৈরি
String createTable = "CREATE TABLE Tutorial( "
+ "Name VARCHAR(255), "
+ "Type VARCHAR(50), "
+ "Logo BLOB)";
stmt.execute(createTable);
// মান ইনসার্ট
String query = "INSERT INTO Tutorial(Name, Type, Logo) VALUES (?, ?, ?)";
PreparedStatement pstmt = con.prepareStatement(query);
pstmt.setString(1, "JavaFX");
pstmt.setString(2, "Java_library");
FileInputStream fin = new FileInputStream("E:\\images\\javafx_logo.jpg");
pstmt.setBinaryStream(3, fin);
pstmt.execute();
pstmt.setString(1, "CoffeeScript");
pstmt.setString(2, "scripting Language");
fin = new FileInputStream("E:\\images\\coffeescript_logo.jpg");
pstmt.setBinaryStream(3, fin);
pstmt.execute();
pstmt.setString(1, "Cassandra");
pstmt.setString(2, "NoSQL database");
fin = new FileInputStream("E:\\images\\cassandra_logo.jpg");
pstmt.setBinaryStream(3, fin);
pstmt.execute();
System.out.println("Data inserted");
ResultSet rs = stmt.executeQuery("Select * from Tutorial");
while (rs.next()) {
System.out.print("Name: " + rs.getString("Name") + ", ");
System.out.print("Tutorial Type: " + rs.getString("Type") + ", ");
System.out.print("Logo: " + rs.getBlob("Logo"));
System.out.println();
}
}
}
আউটপুট
Connection established...... Data inserted Name: JavaFX, Tutorial Type: Java_library, Logo: com.mysql.jdbc.Blob@7dc5e7b4 Name: CoffeeScript, Tutorial Type: scripting Language, Logo: com.mysql.jdbc.Blob@1ee0005 Name: Cassandra, Tutorial Type: NoSQL database, Logo: com.mysql.jdbc.Blob@75a1cd57
নোট: JDBC প্রোগ্রাম ব্যবহার করে শুধু .gif বা .jpeg বা .png টাইপের ছবি সংরক্ষণ ও বের করা সম্ভব।