Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

JDBC getCharacterStream() 메서드로 테이블에서 CLOB 값 읽어오는 방법

ResultSet 인터페이스는 데이터베이스 테이블에서 CLOB 타입의 값을 가져오기 위해 getClob() 메서드를 제공합니다. 여기에 더해, CLOB 값을 문자 스트림 형태로 읽을 수 있는 getCharacterStream() 메서드도 함께 제공됩니다.

getClob()과 getCharacterStream()의 차이점

getCharacterStream() 메서드는 getClob()과 마찬가지로 컬럼의 인덱스를 나타내는 정수 값 또는 컬럼 이름을 나타내는 문자열을 매개변수로 받아 해당 컬럼의 값을 조회합니다.

두 메서드의 차이점은 반환 타입에 있습니다. getClob() 메서드가 Clob 객체를 반환하는 반면, getCharacterStream() 메서드는 Reader 클래스 객체를 반환합니다. 따라서 대용량 텍스트 데이터를 스트림 방식으로 순차적으로 읽어야 할 때 유용하게 사용할 수 있습니다.

예제 준비하기

예제를 진행하기 위해 데이터베이스에 다음과 같은 구조의 MyData 테이블을 생성했다고 가정해 보겠습니다.

+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| Name    | varchar(255) | YES  |     | NULL    |       |
| Article | longtext     | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+

그리고 이 테이블에 'JavaFX'라는 이름과 함께 대용량 텍스트 데이터를 삽입해 두었습니다. 이제 getString()과 getCharacterStream() 메서드를 사용하여 MyData 테이블의 내용을 조회하는 프로그램을 작성해 보겠습니다.

예제 코드

import java.io.FileWriter;
import java.io.Reader;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class RetrievingClob_CharStream {
    public static void main(String args[]) throws Exception {
        // 드라이버 등록
        DriverManager.registerDriver(new com.mysql.jdbc.Driver());
        // 데이터베이스 연결
        String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
        Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
        System.out.println("Connection established......");
        // Statement 객체 생성
        Statement stmt = con.createStatement();
        // 데이터 조회
        ResultSet rs = stmt.executeQuery("select * from MyData");
        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......
Contents of the table......
JavaFX
E:\Data\clob_output0.txt

결과 확인하기

프로그램 실행 후 출력된 경로의 파일을 열어보면, 테이블에서 조회한 CLOB 데이터의 내용이 그대로 저장되어 있는 것을 확인할 수 있습니다.

JDBC getCharacterStream() 메서드로 테이블에서 CLOB 값 읽어오는 방법

이처럼 getCharacterStream() 메서드를 활용하면 Clob 객체를 직접 다루지 않고도 Reader 스트림을 통해 대용량 텍스트 데이터를 손쉽게 파일 등으로 출력할 수 있습니다.