एक BLOB बाइनरी लार्ज ऑब्जेक्ट है जो अधिकतम 65535 कैरेक्टर की लंबाई के साथ परिवर्तनीय मात्रा में डेटा रख सकता है।
इनका उपयोग बड़ी मात्रा में बाइनरी डेटा स्टोर करने के लिए किया जाता है, जैसे इमेज या अन्य प्रकार की फाइलें। TEXT के रूप में परिभाषित फील्ड भी बड़ी मात्रा में डेटा रखते हैं। दोनों के बीच अंतर यह है कि स्टोर किए गए डेटा पर सॉर्ट और तुलना BLOB पर केस-सेंसिटिव होती है और TEXT फील्ड में केस-सेंसिटिव नहीं होती। आप BLOB या TEXT के साथ लंबाई निर्दिष्ट नहीं करते।
डेटाबेस में Blob स्टोर करना
JDBC प्रोग्राम का उपयोग करके डेटाबेस में Blob डेटाटाइप स्टोर करने के लिए नीचे दिए गए चरणों का पालन करें
चरण 1: डेटाबेस से कनेक्ट करें
आप DriverManager क्लास के getConnection() मेथड का उपयोग करके डेटाबेस से कनेक्ट कर सकते हैं।
MySQL URL जो jdbc:mysql://localhost/sampleDB है (जहां sampleDB डेटाबेस नाम है), यूजरनाम और पासवर्ड को पैरामीटर के रूप में getConnection() मेथड में पास करके MySQL डेटाबेस से कनेक्ट करें।
String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
चरण 2: PreparedStatement बनाएं
Connection इंटरफ़ेस के prepareStatement() मेथड का उपयोग करके PreparedStatement ऑब्जेक्ट बनाएं। इस मेथड को पैरामीटर के रूप में INSERT क्वेरी (प्लेसहोल्डर के साथ) पास करें।
PreparedStatement pstmt = con.prepareStatement("INSERT INTO MyTableVALUES(?, ?)");चरण 3: प्लेसहोल्डर पर मान सेट करें
PreparedStatement इंटरफ़ेस के सेटर मेथड का उपयोग करके प्लेसहोल्डर पर मान सेट करें। कॉलम के डेटाटाइप के अनुसार मेथड चुनें। उदाहरण के लिए यदि कॉलम VARCHAR टाइप का है तो setString() मेथड का उपयोग करें और यदि यह INT टाइप का है तो आप setInt() मेथड का उपयोग कर सकते हैं।
और यदि यह Blob टाइप का है तो आप setBinaryStream() या setBlob() मेथड का उपयोग करके मान सेट कर सकते हैं। इन मेथड को पैरामीटर इंडेक्स को दर्शाने वाला एक पूर्णांक वेरिएबल और InputStream क्लास का ऑब्जेक्ट पैरामीटर के रूप में पास करें।
pstmt.setString(1, "sample image"); // Blob टाइप डालना InputStream in = new FileInputStream("E:\\images\\cat.jpg"); pstmt.setBlob(2, in);चरण 4: स्टेटमेंट निष्पादित करें
PreparedStatement इंटरफ़ेस के execute() मेथड का उपयोग करके उपरोक्त बनाए गए PreparedStatement ऑब्जेक्ट को निष्पादित करें।
डेटाबेस से 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