결과 집합 인터페이스는 데이터베이스의 테이블에서 clob 데이터 유형을 검색하기 위해 getClob()이라는 메서드를 제공합니다. 이 외에도 getCharacterStream()
이라는 메서드도 제공합니다.getClob()과 마찬가지로 이 메서드는 열 인덱스를 나타내는 정수(또는 열 이름을 나타내는 문자열 값)도 받고 지정된 열에서 값을 검색합니다. 차이점은 getClob() 메서드(Clob 객체를 반환함)와 달리 이 메서드는 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 {
//Registering the Driver
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//Getting the connection
String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
System.out.println("Connection established......");
//Creating a Statement object
Statement stmt = con.createStatement();
//retrieving the data
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의 내용을 볼 수 있습니다.
