Computer >> Máy Tính >  >> Lập trình >> MySQL

Kiểu dữ liệu JDBC Clob là gì? làm thế nào để lưu trữ và đọc dữ liệu từ nó?

CLOB là viết tắt của Character Large Object nói chung, SQL Clob là một kiểu dữ liệu tích hợp sẵn và được sử dụng để lưu trữ lượng lớn dữ liệu dạng văn bản. Sử dụng kiểu dữ liệu này, bạn có thể lưu trữ dữ liệu lên đến 2.147.483.647 ký tự.

java.sql.Clob giao diện của API JDBC đại diện cho kiểu dữ liệu CLOB. Vì đối tượng Clob trong JDBC được triển khai bằng cách sử dụng bộ định vị SQL, nó giữ một con trỏ logic tới SQL CLOB (không phải dữ liệu).

Cơ sở dữ liệu MYSQL cung cấp hỗ trợ cho kiểu dữ liệu này bằng cách sử dụng bốn biến.

  • TINYTEXT: Loại CLOB có tối đa 28-1 (255) ký tự.

  • TEXT: Loại CLOB có tối đa 216-1 (65535) ký tự.

  • VĂN BẢN TRUNG BÌNH: Loại CLOB có tối đa 224-1 (16777215) ký tự.

  • DÀI TIẾP: Loại CLOB có tối đa 232-1 (4294967295) ký tự.

Lưu trữ kiểu dữ liệu Clob trong totable trong cơ sở dữ liệu

Để lưu trữ kiểu dữ liệu Clob vào cơ sở dữ liệu, sử dụng chương trình JDBC, hãy làm theo các bước dưới đây

Bước 1:Kết nối với cơ sở dữ liệu

Bạn có thể kết nối với cơ sở dữ liệu bằng cách sử dụng getConnection () phương thức của DriverManager lớp học.

Kết nối với cơ sở dữ liệu MySQL bằng cách chuyển URL MySQL là jdbc:mysql:// localhost / sampleDB (trong đó sampleDB là tên cơ sở dữ liệu), tên người dùng và mật khẩu làm tham số cho phương thức getConnection ().

String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");

Bước 2:Tạo câu lệnh soạn sẵn

Tạo một đối tượng PreparedStatement bằng cách sử dụng standardStatement () phương pháp của Kết nối giao diện. Đối với phương pháp này, hãy chuyển truy vấn chèn (với trình giữ chỗ) dưới dạng tham số.

PreparedStatement pstmt = con.prepareStatement("INSERT INTO Technologies(Name,
Type, Article ) VALUES (?, ?, ?)");

Bước 3:Đặt giá trị cho trình giữ chỗ

Đặt các giá trị cho trình giữ chỗ bằng cách sử dụng các phương thức setter của Câu lệnh chuẩn bị giao diện. Chọn các phương thức theo kiểu dữ liệu của cột. Ví dụ:nếu cột thuộc loại VARCHAR, hãy sử dụng phương thức setString () và nếu nó thuộc loại INT, bạn có thể sử dụng phương thức setInt ().

Và nếu nó thuộc loại Clob, bạn có thể đặt giá trị cho nó bằng các phương thức setCharacterStream () hoặc setClob (). Đối với các phương thức này, hãy chuyển một biến số nguyên đại diện cho chỉ số tham số và một đối tượng của lớp Reader làm tham số.

pstmt.setString(1, "JavaFX");
pstmt.setString(2, "Java Library");
FileReader reader = new FileReader("E:\\images\\javafx.txt");
pstmt.setClob(3, reader);
pstmt.execute();

Bước 4:Thực hiện câu lệnh

Thực thi đối tượng PreparedStatement đã tạo ở trên bằng cách sử dụng execute () phương pháp của Câu lệnh chuẩn bị giao diện.

Truy xuất blob từ cơ sở dữ liệu

Phương thức getClob () của giao diện ResultSet chấp nhận một số nguyên đại diện cho chỉ số của cột (hoặc, một giá trị Chuỗi đại diện cho tên của cột) và truy xuất giá trị tại cột được chỉ định và trả về dưới dạng một đối tượng Clob.

while(rs.next()) {
   System.out.println(rs.getString("Name"));
   System.out.println(rs.getString("Type"));
   Clob clob = rs.getClob("Article");
}

getCharacterStream () phương pháp của Clob Giao diện truy xuất nội dung của Clob hiện tại đối tượng và trả về dưới dạng Trình đọc đối tượng.

Sử dụng getClob () bạn có thể lấy nội dung của Clob dưới dạng đối tượng Reader và tạo tệp văn bản với nội dung được truy xuất, sử dụng write () của FileOutputStream đối tượng.

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());

Ví dụ

Ví dụ sau tạo một bảng trong cơ sở dữ liệu MySQL với kiểu dữ liệu Clob trong đó. Chèn dữ liệu văn bản lớn từ một tệp vào tệp đó. Lấy lại văn bản và lưu trữ trong một tệp văn bản khác.

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++;
      }
   }
}

Đầu ra

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