CLOB ย่อมาจาก Character Large Object โดยทั่วไป SQL Clob เป็นประเภทข้อมูลในตัวและใช้เพื่อเก็บข้อมูลข้อความจำนวนมาก เมื่อใช้ประเภทข้อมูลนี้ คุณจะจัดเก็บข้อมูลได้สูงสุด 2,147,483,647 อักขระ
java.sql.Clob อินเตอร์เฟสของ JDBC API แสดงถึงประเภทข้อมูล CLOB เนื่องจากอ็อบเจ็กต์ Clob ใน JDBC ถูกใช้งานโดยใช้ตัวระบุตำแหน่ง SQL จึงถือตัวชี้แบบลอจิคัลไปยัง SQL CLOB (ไม่ใช่ข้อมูล)
ฐานข้อมูล MYSQL ให้การสนับสนุนสำหรับประเภทข้อมูลนี้โดยใช้ตัวแปรสี่ตัว
-
TINYTEXT: ประเภท CLOB ที่มีอักขระสูงสุด 28-1 (255) ตัว
-
ข้อความ: ประเภท CLOB ที่มีอักขระสูงสุด 216-1 (65535) ตัว
-
ข้อความกลาง: ประเภท CLOB ที่มีอักขระสูงสุด 224-1 (16777215)
-
LONGTEXT: ประเภท CLOB ที่มีอักขระสูงสุด 232-1 (4294967295 )
การจัดเก็บประเภทข้อมูล Clob ใน totable ในฐานข้อมูล
ในการจัดเก็บ Clob datatype ไปยังฐานข้อมูลโดยใช้โปรแกรม JDBC ให้ทำตามขั้นตอนด้านล่าง
ขั้นตอนที่ 1:เชื่อมต่อกับฐานข้อมูล
คุณสามารถเชื่อมต่อกับฐานข้อมูลโดยใช้ getConnection() วิธีการของ DriverManager ชั้นเรียน
เชื่อมต่อกับฐานข้อมูล MySQL โดยส่ง URL ของ MySQL ซึ่งก็คือ jdbc:mysql://localhost/sampleDB (โดยที่ sampleDB คือชื่อฐานข้อมูล) ชื่อผู้ใช้และรหัสผ่านเป็นพารามิเตอร์สำหรับเมธอด getConnection()
String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
ขั้นตอนที่ 2:สร้างคำสั่งที่เตรียมไว้
สร้างอ็อบเจ็กต์ PreparedStatement โดยใช้ prepareStatement() วิธีการของการเชื่อมต่อ อินเตอร์เฟซ. วิธีการนี้ส่งแบบสอบถามแทรก (พร้อมตัวยึดตำแหน่ง) เป็นพารามิเตอร์
PreparedStatement pstmt = con.prepareStatement("INSERT INTO Technologies(Name, Type, Article ) VALUES (?, ?, ?)");
ขั้นตอนที่ 3:ตั้งค่าให้กับตัวยึดตำแหน่ง
ตั้งค่าให้กับตัวยึดตำแหน่งโดยใช้วิธี setter ของ PreparedStatement อินเตอร์เฟซ. เลือกวิธีการตามประเภทข้อมูลของคอลัมน์ ตัวอย่างเช่น หากคอลัมน์เป็นประเภท VARCHAR ให้ใช้วิธี setString() และหากเป็นประเภท INT คุณสามารถใช้เมธอด setInt() ได้
และหากเป็นประเภท Clob คุณสามารถตั้งค่าโดยใช้เมธอด setCharacterStream() หรือ setClob() วิธีการเหล่านี้ ให้ส่งตัวแปรจำนวนเต็มแทนดัชนีพารามิเตอร์และวัตถุของคลาส Reader เป็นพารามิเตอร์
pstmt.setString(1, "JavaFX"); pstmt.setString(2, "Java Library"); FileReader reader = new FileReader("E:\\images\\javafx.txt"); pstmt.setClob(3, reader); pstmt.execute();
ขั้นตอนที่ 4:ดำเนินการคำสั่ง
ดำเนินการอ็อบเจกต์ PreparedStatement ที่สร้างขึ้นด้านบนโดยใช้ execute() วิธีการของ PreparedStatement อินเทอร์เฟซ
กำลังดึง Blob จากฐานข้อมูล
เมธอด getClob() ของอินเทอร์เฟซ ResultSet ยอมรับจำนวนเต็มที่แสดงดัชนีของคอลัมน์ (หรือค่าสตริงที่แทนชื่อคอลัมน์) และดึงค่าที่คอลัมน์ที่ระบุและส่งกลับในรูปแบบของอ็อบเจ็กต์ Clob
while(rs.next()) { System.out.println(rs.getString("Name")); System.out.println(rs.getString("Type")); Clob clob = rs.getClob("Article"); }
getCharacterStream() วิธีการของ Clob อินเทอร์เฟซดึงเนื้อหาของ Clob . ปัจจุบัน วัตถุและส่งคืนเป็น ผู้อ่าน วัตถุ
การใช้ getClob() วิธีที่คุณสามารถรับเนื้อหาของ Clob เป็นวัตถุ Reader และสร้างไฟล์ข้อความที่มีเนื้อหาที่ดึงมาโดยใช้ 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 ที่มีประเภทข้อมูล Clob อยู่ในนั้น แทรกข้อมูลข้อความขนาดใหญ่จากไฟล์ไป ดึงข้อความกลับมาและเก็บไว้ในไฟล์ข้อความอื่น
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