Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

JDBC Clob data type là gì? Cách lưu và đọc dữ liệu từ nó?


CLOB (Character Large Object) là kiểu dữ liệu SQL built-in lưu lượng lớn dữ liệu văn bản. Cho phép lưu tới 2,147,483,647 ký tự.

Interface java.sql.Clob của JDBC API đại diện cho kiểu CLOB. Vì Clob object trong JDBC dùng SQL locator, nó giữ con trỏ logic đến SQL CLOB (không phải dữ liệu).

MySQL hỗ trợ kiểu này bằng bốn biến thể:

  • TINYTEXT: CLOB tối đa 255 ký tự (2^8-1).

  • TEXT: CLOB tối đa 65535 ký tự (2^16-1).

  • MEDIUMTEXT: CLOB tối đa 16,777,215 ký tự (2^24-1).

  • LONGTEXT: CLOB tối đa 4,294,967,295 ký tự (2^32-1).

Lưu Clob datatype vào bảng database

Các bước lưu Clob dùng JDBC:

Bước 1: Kết nối database

Dùng getConnection() của DriverManager. Kết nối MySQL URL jdbc:mysql://localhost/sampleDB, username, password:

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

Bước 2: Tạo PreparedStatement

Tạo PreparedStatement bằng prepareStatement() của Connection. Truyền câu insert có placeholder:

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

Bước 3: Thiết lập giá trị cho placeholder

Dùng setter methods của PreparedStatement. Với Clob dùng setCharacterStream() hoặc setClob(). Truyền chỉ số tham số và Reader object:

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 thi statement

Thực thi PreparedStatement bằng execute() của PreparedStatement.

Truy xuất blob từ database

Phương thức getClob() của ResultSet nhận chỉ số cột hoặc tên cột, trả về Clob object.

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

Phương thức getCharacterStream() của interface Clob lấy nội dung Clob object hiện tại trả về Reader object.

Dùng getClob() lấy nội dung Clob làm Reader object, tạo file text với nội dung truy xuất, dùng write() của 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());

Ví dụ

Ví dụ tạo bảng MySQL có Clob, chèn text lớn từ file, truy xuất lại lưu vào file text 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 { 
        // Đăng ký Driver 
        DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 
        // Lấy kết nối 
        String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; 
        Connection con = DriverManager.getConnection(mysqlUrl, "root", "password"); 
        System.out.println("Kết nối thành công......"); 
        // Tạo bảng 
        Statement stmt = con.createStatement(); 
        stmt.execute("CREATE TABLE Technologies( Name VARCHAR(255), Type VARCHAR(255), Article LONGTEXT)"); 
        System.out.println("Bảng đã tạo......"); 
        // Chèn giá trị 
        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(); 
        // Truy xuất dữ liệu 
        ResultSet rs = stmt.executeQuery("select * from Technologies"); 
        int j = 0; 
        System.out.println("Nội dung bảng:"); 
        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++; 
        } 
    } 
}

Kết quả

Kết nối thành công...... 
Bảng đã tạo...... 
Nội dung bảng: 
JavaFX 
Java Library 
E:\images\clob_output1.txt 
CoffeeScript 
Scripting Language 
E:\images\clob_output2.txt 
Cassandra 
NoSQL Database 
E:\images\clob_output3.txt