How do I read CLOBs data from database?

package org.kodejava.jdbc;

import java.io.File;
import java.io.FileWriter;
import java.io.Reader;
import java.nio.charset.StandardCharsets;
import java.sql.*;

public class ClobReadDemo {
    private static final String URL = "jdbc:mysql://localhost/kodejava";
    private static final String USERNAME = "kodejava";
    private static final String PASSWORD = "s3cr*t";

    public static void main(String[] args) {
        try (Connection conn =
                     DriverManager.getConnection(URL, USERNAME, PASSWORD)) {

            String sql = "SELECT book_id, data FROM book_excerpt";
            PreparedStatement stmt = conn.prepareStatement(sql);

            ResultSet resultSet = stmt.executeQuery();
            while (resultSet.next()) {
                long bookId = resultSet.getLong("book_id");
                // Get the character stream of our CLOB file
                Reader reader = resultSet.getCharacterStream("data");

                File file = new File(bookId + ".txt");
                try (FileWriter writer = new FileWriter(file, StandardCharsets.UTF_8)) {
                    char[] buffer = new char[1];
                    while (reader.read(buffer) > 0) {
                        writer.write(buffer);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

The structure of book_excerpt table.

CREATE TABLE `book_excerpt`
(
    `id`          bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    `book_id`     bigint(20) unsigned NOT NULL,
    `description` varchar(255)        NOT NULL,
    `data`        longtext,
    PRIMARY KEY (`id`),
    CONSTRAINT `book_excerpt_ibfk_1` FOREIGN KEY (`book_id`) REFERENCES `book` (`id`)
) ENGINE = InnoDB;

Maven Dependencies

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>8.4.0</version>
</dependency>

Maven Central

Wayan

1 Comments

  1. Worked like magic.. Thank you for this great code snippet. Keep posting such nice stuff and keep empowering the community.

    Reply

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.