결과 집합 인터페이스는 데이터베이스의 테이블에서 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의 내용을 볼 수 있습니다.