JDBC 프로그래밍에서 대용량 텍스트 데이터를 다룰 때는 CLOB(Character Large Object) 데이터 타입을 사용합니다. 이 글에서는 JDBC의 PreparedStatement 인터페이스를 활용해 CLOB 타입 컬럼에 값을 삽입하는 방법을 단계별로 살펴보겠습니다.
예제용 테이블 준비
먼저 데이터베이스에 다음과 같은 구조의 MyData 테이블이 이미 생성되어 있다고 가정합니다.
+---------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+-------+ | Name | varchar(255) | YES | | NULL | | | Article | longtext | YES | | NULL | | +---------+--------------+------+-----+---------+-------+
Article 컬럼은 MySQL의 longtext 타입으로, Java에서는 CLOB에 해당하는 대용량 문자열을 저장할 수 있습니다.
CLOB 값 삽입에 사용되는 주요 메서드
JDBC 프로그램으로 CLOB 데이터 타입에 값을 삽입하려면, 파일의 내용을 읽어 데이터베이스 행에 설정해 주는 메서드를 사용해야 합니다. PreparedStatement 인터페이스가 바로 이러한 기능을 제공합니다.
1. setCharacterStream() 메서드
void setCharacterStream(int parameterIndex, Reader reader) 메서드는 Reader 객체의 내용을 지정된 인덱스의 파라미터 값으로 설정합니다. 오버로드된 다른 변형 메서드는 다음과 같습니다.
void setCharacterStream(int parameterIndex, Reader reader, int length)
void setCharacterStream(int parameterIndex, Reader reader, long length)
2. setClob() 메서드
void setClob(int parameterIndex, Clob x) 메서드는 주어진 java.sql.Clob 객체를 지정된 인덱스의 파라미터 값으로 설정합니다. 이 메서드의 다른 변형은 아래와 같습니다.
void setClob(int parameterIndex, Reader reader)
void setClob(int parameterIndex, Reader reader, long length)
즉, 위 두 계열의 메서드 중 어느 것을 사용해도 CLOB 데이터 타입에 값을 설정할 수 있습니다.
실전 예제 코드
다음 예제는 setClob() 메서드를 사용하여 CLOB 데이터 타입에 파일 내용을 삽입하는 전체 과정을 보여줍니다.
import java.io.FileReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class InsertingValueInClob {
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......");
// 값 삽입
String query = "INSERT INTO MyData(Name, Article ) VALUES (?, ?)";
PreparedStatement pstmt = con.prepareStatement(query);
pstmt.setString(1, "JavaFX");
FileReader reader = new FileReader("E:\\images\\javafx.txt");
pstmt.setClob(2, reader);
pstmt.execute();
System.out.println("Data inserted");
}
}코드의 핵심 흐름은 다음과 같습니다.
드라이버 등록 및 연결: MySQL JDBC 드라이버를 등록하고 sampleDB에 연결합니다.
PreparedStatement 생성: INSERT 쿼리의 파라미터(?)를 바인딩할 수 있도록 준비합니다.
파일 읽기:
FileReader객체로 텍스트 파일을 열어 스트림 형태로 읽습니다.setClob()으로 바인딩: 두 번째 파라미터에 Reader 객체를 전달하여 대용량 텍스트를 설정합니다.
실행:
execute()호출로 데이터를 삽입합니다.
실행 결과
Connection established...... Table Created...... Contents of the table are: JavaFX E:\images\MyData_clob_output1.txt
프로그램 실행 후 MySQL Workbench에서 해당 레코드의 CLOB 값을 조회하면, 아래 그림처럼 삽입된 텍스트 데이터가 정상적으로 저장된 것을 확인할 수 있습니다.

마무리
이처럼 JDBC에서는 setClob() 또는 setCharacterStream() 메서드를 사용하면 파일 기반의 대용량 텍스트 데이터를 손쉽게 CLOB 컬럼에 삽입할 수 있습니다. 특히 문서, 게시글 본문처럼 크기가 큰 텍스트를 다루는 애플리케이션에서는 이 방식이 메모리 효율성 면에서도 유리하므로, 반드시 숙지해 두면 좋습니다.