Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ประเภทข้อมูล JDBC Clob คืออะไร? วิธีการจัดเก็บและอ่านข้อมูลจากมัน?


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