Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

แปลง CLOB เป็น String ใน Java JDBC

CLOB (Character Large Object) ใช้เก็บข้อความขนาดใหญ่ ได้สูงสุด 2,147,483,647 ตัวอักษร ใน JDBC ใช้ interface java.sql.Clob MySQL รองรับผ่าน TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT

ขั้นตอนแปลง CLOB เป็น String

  1. ดึงค่า Clob จากตารางด้วย getClob() หรือ getCharacterStream() ของ PreparedStatement
  2. อ่านทีละตัวอักษรจาก Stream แล้ว append ไปยัง StringBuilder หรือ StringBuffer
  3. นำ String ที่ได้ไปแสดงหรือเก็บ

โค้ดสำคัญ


// 1. ดึง Clob และได้ Reader
Reader r = clob.getCharacterStream();

// 2. อ่านทีละตัวอักษร
int ch;
StringBuffer buffer = new StringBuffer();
while ((ch = r.read()) != -1) {
    buffer.append((char) ch);
}

// 3. ใช้งาน String
System.out.println(buffer.toString());

ตัวอย่างโค้ดเต็ม (Insert และ Read CLOB)


import java.io.FileReader;
import java.io.Reader;
import java.sql.*;

public class ClobToString {
    public static void main(String args[]) throws Exception {
        DriverManager.registerDriver(new com.mysql.jdbc.Driver());
        String mysqlUrl = "jdbc:mysql://localhost/sampledatabase";
        Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
        System.out.println("Connection established......");
        
        Statement stmt = con.createStatement();
        
        // Insert CLOB จากไฟล์
        String query = "INSERT INTO Technologies_data VALUES (?, ?, ?)";
        PreparedStatement pstmt = con.prepareStatement(query);
        
        pstmt.setString(1, "JavaFX");
        pstmt.setString(2, "Java Library");
        FileReader reader = new FileReader("E:\\images\\javafx_contents.txt");
        pstmt.setClob(3, reader);
        pstmt.execute();
        // ... insert อื่นๆ ...
        
        // Read CLOB แปลงเป็น String
        ResultSet rs = stmt.executeQuery("select * from Technologies_data");
        while (rs.next()) {
            System.out.println("Article: " + rs.getString("Name"));
            Clob clob = rs.getClob("Article");
            Reader r = clob.getCharacterStream();
            StringBuffer buffer = new StringBuffer();
            int ch;
            while ((ch = r.read()) != -1) {
                buffer.append((char) ch);
            }
            System.out.println("Contents: " + buffer.toString());
        }
    }
}

ผลลัพธ์


Article: JavaFX
Contents: JavaFX is a Java library using which you can develop Rich Internet Applications...
Article: CoffeeScript
Contents: CoffeeScript is a lightweight language based on Ruby and Python...
Article: Cassandra
Contents: Apache Cassandra is a highly scalable, high-performance distributed database...