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