CLOB মানে সাধারণভাবে ক্যারেক্টার লার্জ অবজেক্ট, একটি SQL Clob হল একটি অন্তর্নির্মিত ডেটাটাইপ এবং এটি প্রচুর পরিমাণে পাঠ্য তথ্য সংরক্ষণ করতে ব্যবহৃত হয়। এই ডেটাটাইপ ব্যবহার করে, আপনি 2,147,483,647 অক্ষর পর্যন্ত ডেটা সংরক্ষণ করতে পারেন৷
java.sql.Clob JDBC API-এর ইন্টারফেস CLOB ডেটাটাইপ প্রতিনিধিত্ব করে। যেহেতু JDBC-তে ক্লোব অবজেক্ট একটি SQL লোকেটার ব্যবহার করে প্রয়োগ করা হয়, তাই এটি SQL CLOB-তে একটি লজিক্যাল পয়েন্টার রাখে (ডেটা নয়)।
MYSQL ডাটাবেস চারটি ভেরিয়েবল ব্যবহার করে এই ডেটাটাইপের জন্য সমর্থন প্রদান করে।
-
TINYTEXT: সর্বাধিক 28-1 (255) অক্ষর সহ একটি CLOB প্রকার।
-
টেক্সট: সর্বাধিক 216-1 (65535) অক্ষর সহ একটি CLOB প্রকার৷
-
মাঝারি পাঠ্য: সর্বাধিক 224-1 (16777215) অক্ষর সহ একটি CLOB প্রকার৷
-
লংটেক্সট: সর্বাধিক 232-1 (4294967295 ) অক্ষর সহ একটি CLOB প্রকার৷
একটি ডাটাবেসে টোটেবলে ক্লোব ডেটাটাইপ সংরক্ষণ করা
ক্লোব ডেটাটাইপকে ডাটাবেসে সংরক্ষণ করতে, JDBC প্রোগ্রাম ব্যবহার করে নীচে দেওয়া ধাপগুলি অনুসরণ করুন
ধাপ 1:ডাটাবেসের সাথে সংযোগ করুন
আপনি getConnection() ব্যবহার করে একটি ডাটাবেসের সাথে সংযোগ করতে পারেন ড্রাইভার ম্যানেজার এর পদ্ধতি ক্লাস।
MySQL URL পাস করে MySQL ডাটাবেসের সাথে সংযোগ করুন যা হল jdbc:mysql://localhost/sampleDB (যেখানে স্যাম্পলডিবি হল ডাটাবেসের নাম), getConnection() পদ্ধতির প্যারামিটার হিসেবে ব্যবহারকারীর নাম এবং পাসওয়ার্ড।
String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
ধাপ 2:একটি প্রস্তুত বিবৃতি তৈরি করুন
prepareStatement() ব্যবহার করে একটি PreparedStatement অবজেক্ট তৈরি করুন সংযোগের পদ্ধতি ইন্টারফেস. এই পদ্ধতিতে একটি প্যারামিটার হিসাবে সন্নিবেশ ক্যোয়ারী (স্থানধারক সহ) পাস করুন।
PreparedStatement pstmt = con.prepareStatement("INSERT INTO Technologies(Name, Type, Article ) VALUES (?, ?, ?)");
ধাপ 3:স্থানধারীদের মান সেট করুন
প্রস্তুত স্টেটমেন্টের সেটার পদ্ধতি ব্যবহার করে স্থানধারীদের মান সেট করুন ইন্টারফেস. কলামের ডেটাটাইপ অনুযায়ী পদ্ধতি বেছে নিন। উদাহরণ স্বরূপ কলাম VARCHAR টাইপের হলে setString() পদ্ধতি ব্যবহার করুন এবং যদি এটি INT প্রকারের হয় তাহলে আপনি setInt() পদ্ধতি ব্যবহার করতে পারেন।
এবং যদি এটি Clob প্রকারের হয় তবে আপনি setCharacterStream() বা setClob() পদ্ধতি ব্যবহার করে এটির মান সেট করতে পারেন। এই পদ্ধতিতে একটি পূর্ণসংখ্যা ভেরিয়েবল পাস করে যা প্যারামিটার সূচক এবং রিডার ক্লাসের একটি বস্তুকে প্যারামিটার হিসাবে উপস্থাপন করে।
pstmt.setString(1, "JavaFX"); pstmt.setString(2, "Java Library"); FileReader reader = new FileReader("E:\\images\\javafx.txt"); pstmt.setClob(3, reader); pstmt.execute();
পদক্ষেপ 4:বিবৃতিটি কার্যকর করুন
execute() ব্যবহার করে উপরে তৈরিকৃত PreparedStatement অবজেক্টটি চালান প্রস্তুত স্টেটমেন্টের পদ্ধতি ইন্টারফেস।
ডাটাবেস থেকে ব্লব পুনরুদ্ধার করা হচ্ছে
রেজাল্টসেট ইন্টারফেসের getClob() পদ্ধতিটি কলামের সূচকের প্রতিনিধিত্বকারী একটি পূর্ণসংখ্যা গ্রহণ করে (অথবা, কলামের নামের প্রতিনিধিত্ব করে একটি স্ট্রিং মান) এবং নির্দিষ্ট কলামে মানটি পুনরুদ্ধার করে এবং এটি একটি ক্লোব অবজেক্টের আকারে ফেরত দেয়।
while(rs.next()) { System.out.println(rs.getString("Name")); System.out.println(rs.getString("Type")); Clob clob = rs.getClob("Article"); }
getCharacterStream() ক্লব এর পদ্ধতি ইন্টারফেস বর্তমান ক্লব এর বিষয়বস্তু পুনরুদ্ধার করে বস্তু এবং একটি পাঠক হিসাবে ফিরে আসে বস্তু।
getClob() ব্যবহার করে পদ্ধতিতে আপনি ক্লোবের বিষয়বস্তু রিডার অবজেক্ট হিসেবে পেতে পারেন এবং write() ব্যবহার করে পুনরুদ্ধার করা বিষয়বস্তু দিয়ে টেক্সট ফাইল তৈরি করতে পারেন। FileOutputStream এর পদ্ধতি বস্তু।
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 ডাটাবেসে একটি ক্লোব ডেটাটাইপ সহ একটি টেবিল তৈরি করে। একটি ফাইল থেকে এটিতে বড় পাঠ্য ডেটা সন্নিবেশ করায়। পাঠ্যটি পুনরুদ্ধার করে এবং এটিকে অন্য পাঠ্য ফাইলে সংরক্ষণ করে।
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 { //Registering the Driver DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //Getting the connection String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; Connection con = DriverManager.getConnection(mysqlUrl, "root", "password"); System.out.println("Connection established......"); //Creating a table Statement stmt = con.createStatement(); stmt.execute("CREATE TABLE Technologies( Name VARCHAR(255), Type VARCHAR(255), Article LONGTEXT)"); System.out.println("Table Created......"); //Inserting values 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(); //Retrieving the data 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